Scrollback TUI
dim 的交互式终端界面有两种形态:全屏(fullscreen) 与 Scrollback。本页只讲 Scrollback 形态,全屏形态见 全屏 TUI。
Scrollback 形态直接写在终端主屏上:对话像 git log、npm test 的输出一样一行行往下追加,翻上去的内容进入终端自己的 scrollback。历史归终端所有——滚动、搜索、选择、复制全部用你终端原本的键位,应用不接管。退出之后,整段对话仍然留在终端里。
代价是鼠标全程关闭(终端自滚和鼠标上报互斥),也没有主题切换(已经写进终端的行无法重绘)。
什么时候用它
| 你的场景 | 建议 |
|---|---|
想在跑完之后用 Cmd+F 搜索整段对话 |
Scrollback |
| 想把某段输出拖选复制成纯文本 | Scrollback |
| 想让对话和 shell 命令混在同一份终端记录里 | Scrollback |
| 在 SSH / tmux 里工作 | Scrollback |
| 需要鼠标点击、换主题、居中浮层 | 全屏 |
两种形态共用同一套会话和配置,随时互切,不会丢会话。
启动
# 以 Scrollback 形态打开
dim tui --scrollback
# 打开并恢复指定会话
dim tui --scrollback --session <session-id>
没有设置过默认形态时,直接敲 dim 打开的就是 Scrollback。
设为默认形态
dim tui --scrollback default
只写配置、不打开界面,成功后输出 Default TUI form set to scrollback。之后直接敲 dim 就是 Scrollback。也可以在界面里改:/settings → 启动界面形态。
运行中切换形态
输入 /tui 回车切到另一种形态,/tui --fullscreen、/tui --scrollback 指定目标。切换不新建会话,正在跑的任务不中断。
首次进入新目录
第一次在某个目录里启动时会先问一次是否信任该目录——项目级的 .mcp.json 和 hooks 配置只有在信任之后才会加载。选择不信任则直接退出,不会启动会话。
界面结构
终端从上到下分成两部分:上面是已经写死的历史(归终端),下面是会随时重绘的交互区。
── 终端 scrollback:滚轮 / Cmd+F / 拖选复制都归终端 ──────────
┌────────────────────────────────────────────────────┐
│ ▓▓▓▓ │
│ ▓▓ ▓▓ Welcome to DIM! │
│ ▓▓ ▓▓ Type / for commands · Ctrl+P for palette │
│ ▓▓▓▓ │
│ │
│ Workspace ~/repo │
│ Git branch main │
└────────────────────────────────────────────────────┘
› 帮我修这个测试
◆ 先看失败原因。
● Read src/app.test.ts
● Bash npm test -- --filter app
✕ Edit src/app.ts +1 -1
── 以下是会随时重绘的交互区 ──────────────────────────────
∴ 正在检查测试输出… ← 实时区
· Bash npm test 4s
⣾ working 4s
┌─────────────────────────────────────────┐
│ › Ask anything... │ ← 输入框
└─────────────────────────────────────────┘
esc interrupt ctx 42.0K (33%) model ← 状态行
启动时会先写一块配置摘要:工作目录、Git 分支、当前模型、审批模式,以及一行"你这个终端怎么翻历史"的提示。它是一次性的快照,之后改设置不会回写。
读懂输出
每个块的行首有 2 格 gutter,用符号区分类型;块内所有行都缩进到 gutter 右边,方便整段拖选复制。
| 符号 | 含义 |
|---|---|
› |
你发出的消息(整条带底色,标记新一轮的开始) |
◆ |
模型回复 |
∴ |
thinking |
● |
工具执行完成 |
✕ |
工具执行失败 |
⚙ |
子代理 / 后台任务通知(以 bg · 开头) |
■ |
错误 |
◦ |
状态、压缩、中断、审批结果等系统提示 |
工具块只展示摘要,不铺整段输出:
● Bash npm test
● Grep "ProviderManager" 12 matches
● Edit src/app.ts +2 -1
12 - const a = 1
12 + const a = 2
● Write src/new.ts (120 lines)
模型看到的是工具的完整结果,你在终端里看到的是摘要——这是刻意的取舍,避免几千行输出淹没对话。
代码块保留原始的 ``` 围栏并做语法高亮,除了统一的 2 格缩进不加任何装饰前缀;拖选复制出来只需要去掉这 2 格。
翻历史、搜索、复制
这些操作由你的终端提供,键位因终端而异:
| 终端 | 翻页滚动 | 搜索 | 复制选区 |
|---|---|---|---|
| macOS Terminal / iTerm2 | Cmd+PageUp 或滚轮 |
Cmd+F |
拖选 / Cmd+C |
| kitty / Ghostty / WezTerm / Alacritty | Shift+PageUp 或滚轮 |
终端自带的分页器搜索 | 拖选 / Ctrl+Shift+C |
| Linux(GNOME / Konsole) | Shift+PageUp |
Ctrl+Shift+F |
Ctrl+Shift+C |
| Windows Terminal | Ctrl+Shift+PageUp |
Ctrl+Shift+F |
拖选 / Ctrl+Shift+C |
| tmux 内 | prefix+[ 进 copy-mode |
copy-mode / |
copy-mode Space 再 Enter |
回到顶部 / 底部:macOS 上是 Cmd+Home / Cmd+End,多数终端是 Shift+Home / Shift+End,Windows Terminal 是 Ctrl+Shift+Home / Ctrl+Shift+End,tmux copy-mode 里是 g / G。
不用记:启动摘要里会写一行你当前终端的速查,随时输入 /keys 还能把完整键位表打进 scrollback,之后用终端搜索就能翻回来。
输入框
输入框固定在文档尾部,内容 1 到 7 行自动增高。
| 操作 | 按键 |
|---|---|
| 发送 | Enter |
| 换行 | Shift+Enter;终端不支持时用 Ctrl+J |
切换 AGENT / PLAN 模式 |
Tab |
| 翻输入历史(单行状态下) | Up / Down |
| 打开命令面板 | / 或 Ctrl+P |
| 引用技能 | $ |
| 引用文件或目录 | @ 或直接输入路径,Tab 补目录 |
| 粘贴剪贴板图片 | Ctrl+V |
| 清空草稿 | Esc(空闲且无面板时) |
粘贴长文本、文件路径、图片都会折叠成一个高亮 token,删掉 token 即移除附件。输入历史按目录分桶保存。
面板
Scrollback 没有居中浮层:所有面板都在输入框下方展开,同宽、同左缘,同一时刻只有一个。
┌─────────────────────────────────────────────┐
│ › │
└─────────────────────────────────────────────┘
┌ Sessions ─────────────────────── esc close ┐
│ filter: fix_ │
│ › fix test flake 10m ago │
│ composer refactor 2h ago │
│ 1-2 / 23 · enter open · ^R refresh │
└─────────────────────────────────────────────┘
esc interrupt ctx 42.0K (33%) model
| 面板类型 | 操作 |
|---|---|
| 列表 | 打字过滤,Up/Down、Home/End、PageUp/PageDown 移动,Enter 激活,Esc 先清过滤词再关闭 |
| 表单 | Tab/Shift+Tab 切控件,Left/Right 切分段选项,Space 开关,Enter 执行,Esc 退一步 |
补全(/、$、路径) |
保持输入框可编辑,打字即过滤,输入空格就自动关闭 |
每个面板底部都有一行 hint 写着当前可用的键,不需要背。
命令
命令与全屏形态基本一致,另外多两个本形态专属的:
| 命令 | 作用 |
|---|---|
/keys |
把完整键位表(应用键位 + 你这个终端的原生键位)写进 scrollback |
/queue |
查看和管理运行中排队的消息 |
以下命令在本形态不提供:
| 命令 | 原因 |
|---|---|
/theme |
已经写进终端的行无法重绘,换主题只会让历史与新内容颜色不一致 |
/effort |
推理档位已经能在 /models 面板里用 Left/Right 直接调 |
其余常用命令:/new、/resume、/connect、/models、/approvals、/settings、/mcp、/plugins、/skills、/timeline、/compact、/export、/language、/debug、/tui、/exit。
/resume 只列出当前目录的会话;要打开别的目录的会话,先 cd 过去再启动 CLI。
在 /models 面板里,Left/Right 调整光标所在行的 thinking 等级,改完立即保存;Enter 只负责选中模型并关闭面板。
运行中
发送后,输入框上方出现实时区:thinking 与回复的稳定行会持续追加进终端历史,只留最后一行在实时区;下面逐条列出正在跑的工具和耗时。
∴ thinking 当前未完成的一行…
回复当前未完成的一行…
· Bash npm test 4s
┌─ 队列(2) ────────────────────────┐
│ › 然后跑一下 lint │
│ › 顺便更新一下文档 │
│ ↑ 编辑 · ctrl+s 立即 steer · /queue │
└────────────────────────────────────┘
⣾ working 4s
| 想做的事 | 怎么做 |
|---|---|
| 打断当前这轮 | Esc |
| 运行中继续输入 | 直接打字,Enter 提交后进队列 |
| 编辑最后一条排队消息 | 输入框为空时按 ↑ |
| 让最早一条排队消息立刻进入本轮 | Ctrl+S |
| 管理队列(删除、逐条 steer) | /queue |
| 看后台任务 / 子代理 | Ctrl+O |
状态行常驻一行,左边是模式标签、审批模式、运行状态和分支,右边是上下文用量和当前模型:
AGENT ⏵⏵ default :main ctx 42.0K (33%) gpt-5.2
审批标签用颜色区分让出了多少权限:default 灰、approve for me 黄、full access 红。
审批与提问
审批面板同样在输入框下方展开:
┌ Permission required ────────────────────────┐
│ Bash: rm -rf node_modules │
│ [Allow once] Allow always Reject │
│ y allow · n reject · ←→ move · enter confirm│
└─────────────────────────────────────────────┘
Y 允许一次,N 拒绝,Left/Right/Tab 移焦,Enter 确认。决议会以 ◦ 块写进 scrollback,所以整份终端记录就是完整的决策留痕。
模型提问(AskUser)时,Up/Down 移动选项,1–9 直接选第 N 项,Space 勾选,Enter 前进到下一题,Tab/Left/Right 在题目之间切换,最后在 Confirm 页提交;Esc 取消整轮提问。
快捷键总表
Scrollback 只用 Ctrl 系和无修饰键,不用 Cmd / Alt——那些键会被终端自己截获。
| 按键 | 作用 |
|---|---|
Enter |
发送 |
Shift+Enter / Ctrl+J |
换行 |
Tab |
切换 AGENT / PLAN |
Ctrl+P |
命令面板(任何面板下都能用) |
Ctrl+O |
后台任务面板 |
Ctrl+T |
时间线 / 消息选择 |
Ctrl+N |
新会话 |
Ctrl+V |
粘贴剪贴板图片 |
Ctrl+R |
会话 / 技能面板里刷新 |
Ctrl+D |
会话 / 技能面板里删除 |
F2 |
会话面板里重命名 |
Esc |
面板:先清过滤词再关闭;运行中:打断;空闲:清空草稿 |
Ctrl+C |
第一次关面板 / 清草稿 / 打断;第二次退出 |
事件按 退出确认 → 审批提问 → 面板 → 输入框 的顺序分派,上层处理过的按键不会再传到下层。
退出
Ctrl+C 按两次,或输入 /exit。有任务在跑时会先弹确认,Enter / Y 强退,Esc / N 留下。
退出后整段对话仍然留在终端里,可以继续滚动、搜索和复制。
常见问题
滚上去以后新内容看不见了。 终端停在你滚到的位置。按终端的"回到底部"键(多数终端直接敲一个键或滚到底即可)。
resize 之后旧内容排版乱了。 已经写进终端的行不会重排——各终端的硬换行行为不一致,重排反而会破坏复制。新内容按新宽度渲染。
恢复会话后看不到很早以前的消息。 恢复时只重放最近一页(最多 100 条),更早的历史无法往上插入,边界处会有一行明确标注。要翻更早的内容用 /timeline。
白底终端里字看不清。 启动时会探测一次终端底色并选择深色或浅色配色。如果探测不准,换用全屏形态并用 /theme 选主题。
鼠标点不动。 本形态鼠标全程关闭,这是终端原生滚动能工作的前提。所有操作都有键盘路径,/keys 可以查。
DimAgent