OpenCode 快捷键与 TUI 效率技巧完全指南:从入门到肌肉记忆

OpenCode 快捷键与 TUI 效率技巧完全指南:从入门到肌肉记忆

使用 OpenCode 一段时间后,你会发现一个明显的现象:同样的任务,有的人三秒完成切换,有的人却要在菜单里翻来翻去。差距就在于对快捷键和 TUI(终端用户界面)操作的熟练程度。

本文将系统梳理 OpenCode 的快捷键体系、TUI 命令和效率技巧,帮你把常用操作变成肌肉记忆。

为什么快捷键值得花时间学习

OpenCode 是一款运行在终端中的 AI 编程助手,它的核心理念是让你无需离开终端就能完成编码工作。所有操作都设计为键盘驱动,这意味着:

  • 不存在"鼠标 vs 键盘"的切换成本
  • 操作速度直接反映思维速度
  • 熟练后能获得类似 Vim 的沉浸式编程体验

OpenCode 的快捷键系统采用 Leader Key 模式设计,与 Vim 生态实现了良好兼容。

Leader Key:快捷键的"前缀键"

OpenCode 采用 Leader Key 机制来组织快捷键。默认情况下,Ctrl+X 是 Leader Key。这意味着大多数操作需要先按下 Ctrl+X,然后松开,再按下对应的字母键。

比如,要创建一个新会话(New Session),操作为:

先按 Ctrl+X,松开,再按 n

这种设计有两个好处:一是避免与终端自身的热键冲突,二是为快捷键提供更大的命名空间——二十六个字母都是可用的。

leader_timeout 控制按下 Leader Key 后等待下一个键的超时时间,默认 2000 毫秒。如果你觉得等待时间太长或太短,可以在 tui.json 中调整:

{
  "$schema": "https://opencode.ai/tui.json",
  "leader_timeout": 1000
}

核心快捷键速查

以下是日常使用频率最高的快捷键,按使用场景分类:

会话管理

| 操作 | 快捷键 | 说明 |
|------|--------|------|
| 新建会话 | Ctrl+X n | 开始新的对话 |
| 会话列表 | Ctrl+X l | 浏览和切换历史会话 |
| 会话时间线 | Ctrl+X g | 查看会话的 Git 时间线 |
| 重命名会话 | Ctrl+R | 为当前会话命名 |
| 删除会话 | Ctrl+D | 删除当前会话 |
| 压缩会话 | Ctrl+X c | 压缩上下文,释放 token 配额 |
| 导出会话 | Ctrl+X x | 将会话导出为 Markdown 文件 |
| 分享会话 | 无默认快捷键 | 用 /share 命令 |

Ctrl+X c(会话压缩)是一个容易被忽视但非常重要的操作。当对话轮次过多、上下文窗口即将耗尽时,压缩会话可以让 LLM 对之前的对话进行摘要,从而继续有效工作。

模型与 Agent 切换

| 操作 | 快捷键 | 说明 |
|------|--------|------|
| 模型列表 | Ctrl+X m | 查看和选择可用模型 |
| 模型提供商列表 | Ctrl+A | 切换模型提供商 |
| 收藏模型切换 | Ctrl+F | 标记/取消收藏当前模型 |
| 最近模型切换 | F2 | 切换到最近使用的下一个模型 |
| 反向切换模型 | Shift+F2 | 切换到上一个模型 |
| Agent 列表 | Ctrl+X a | 查看和选择 Agent |
| Agent 循环 | Tab | 切换到下一个 Agent |
| 反向循环 | Shift+Tab | 切换回上一个 Agent |
| 变体循环 | Ctrl+T | 切换模型变体(如 reasoning 模式) |

Tab 切换 Agent 的操作尤其值得熟练——它可以在 Plan 模式(仅规划)和 Build 模式(执行修改)之间快速切换,这是 OpenCode 推荐的标准工作流:

Tab → 切换到 Plan 模式 → 描述需求 → 审查计划 → Tab → 切换回 Build 模式 → 开始实现

消息交互

| 操作 | 快捷键 | 说明 |
|------|--------|------|
| 中断响应 | Esc | 停止 AI 正在生成的回复 |
| 撤销操作 | Ctrl+X u | 撤销最近的对话和文件变更 |
| 重做操作 | Ctrl+X r | 重做已撤销的操作 |
| 复制消息 | Ctrl+X y | 复制当前选中的消息 |
| 隐藏/显示推理 | Ctrl+X h | 切换思考块的显示 |
| 滚动历史 | Ctrl+G / Ctrl+Alt+G | 跳转到对话头/尾 |

Ctrl+X uCtrl+X r 是安全网级别的快捷键。当你发现 AI 的修改方向不对时,按下 Ctrl+X u,所有文件变更都会通过 Git 回滚,对话也回到上一步——这给了你大胆尝试的底气。

编辑器与主题

| 操作 | 快捷键 | 说明 |
|------|--------|------|
| 打开外部编辑器 | Ctrl+X e | 用 $EDITOR 撰写消息 |
| 主题列表 | Ctrl+X t | 浏览和切换主题 |
| 侧栏切换 | Ctrl+X b | 显示/隐藏侧栏 |
| 状态视图 | Ctrl+X s | 查看当前状态信息 |

Ctrl+X e 是一个值得配置的快捷键。当你的 prompt 比较复杂时,直接在终端输入不如在 VS Code 或 Vim 中编写来得舒服。确保设置了 EDITOR 环境变量:

# Linux/macOS
export EDITOR="code --wait"

# Windows PowerShell
$env:EDITOR = "code --wait"

输入编辑

OpenCode 的输入框支持 Emacs 风格的行编辑快捷键,让你在输入 prompt 时也能高效操作:

| 操作 | 快捷键 |
|------|--------|
| 移动到行首 | Ctrl+A |
| 移动到行尾 | Ctrl+E |
| 前移一个字符 | Ctrl+F |
| 后移一个字符 | Ctrl+B |
| 前移一个单词 | Alt+F |
| 后移一个单词 | Alt+B |
| 删除到行尾 | Ctrl+K |
| 删除到行首 | Ctrl+U |
| 删除前一个单词 | Ctrl+W |
| 粘贴 | Ctrl+V |
| 撤销输入 | Ctrl+_ |

斜杠命令:另一种操作方式

如果你记不住快捷键,斜杠(/)命令提供了等效的文字入口。在输入框中输入 / 即可触发命令补全:

/connect     # 配置模型提供商
/compact     # 压缩当前会话
/editor      # 打开外部编辑器
/exit        # 退出 OpenCode (/q 的别名)
/export      # 导出对话到 Markdown
/help        # 显示帮助信息
/init        # 初始化项目的 AGENTS.md
/models      # 列出可用模型 (/m 的别名)
/new         # 新建会话
/redo        # 重做撤销的操作
/sessions    # 查看和切换历史会话
/share       # 分享当前会话
/themes      # 浏览主题
/thinking    # 显示/隐藏推理块
/undo        # 撤销最后一条消息
/unshare     # 取消分享会话

斜杠命令和快捷键是两套平行的入口,你可以根据场景灵活选择——记不住快捷键时用命令,追求速度时用快捷键。

自定义快捷键

如果你觉得默认键位不符合习惯,可以在 tui.json 中自定义任何快捷键。配置文件位于:

  • Linux/macOS: ~/.config/opencode/tui.json
  • Windows: %APPDATA%\opencode\tui.json

下面是几个常见的自定义场景:

更换 Leader Key

如果你习惯 Vim 的 Ctrl+WSpace 作为 Leader,可以这样设置:

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "leader": "space"
  }
}

为常用操作添加快捷键

比如,为 /share 命令绑定一个快捷键:

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "session_share": "<leader>s",
    "session_unshare": "<leader>S"
  }
}

禁用不需要的快捷键

如果某个快捷键与你的终端或其他工具冲突,可以将其设为 "none"

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "session_compact": "none",
    "session_delete": "none"
  }
}

快捷键的多种绑定格式

OpenCode 支持灵活的绑定格式:

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "messages_copy": ["<leader>y", "ctrl+shift+c"],
    "input_paste": {
      "key": "ctrl+v",
      "preventDefault": false
    }
  }
}
  • 逗号分隔的字符串:一个操作绑定多个快捷键
  • 数组格式:更清晰的多个快捷键绑定
  • 对象格式:高级控制,如设置 preventDefault

TUI 配置优化

除了快捷键,tui.json 还有几个值得调整的选项:

{
  "$schema": "https://opencode.ai/tui.json",
  "theme": "opencode",
  "scroll_speed": 5,
  "diff_style": "auto",
  "mouse": true,
  "attention": {
    "enabled": true,
    "notifications": true,
    "sound": true,
    "volume": 0.3
  }
}
  • theme:设置 UI 主题,与主题系统中的配置对应
  • scroll_speed:滚动速度,默认 3,可以调到 5-8 加快浏览速度
  • diff_style:差异显示风格,"auto" 自动适终端宽度,"stacked" 强制上下分栏
  • mouse:是否启用鼠标支持,设为 false 可以保留终端的原生选择行为
  • attention:通知和声音提醒,适合后台等待 AI 回复完成

一些提高效率的小技巧

@ 引用文件

输入 @ 可以模糊搜索项目中的文件,OpenCode 会自动将文件内容加入对话上下文:

How is auth handled in @packages/functions/src/api/auth.ts?

这比手动复制文件路径快得多,也避免了路径拼写错误。

! 执行 Shell 命令

在消息开头输入 !,OpenCode 会将后续内容作为 shell 命令执行,并将结果加入对话:

!git log --oneline -10

这在分析项目状态时非常实用,省去了切换到另一个终端窗口的麻烦。

使用命令面板

Ctrl+P 打开命令面板,可以模糊搜索并执行几乎所有操作——相当于一个"万能入口",忘记快捷键时按它就对了。

Which Key 功能

如果你使用 Which Key 风格的界面,Ctrl+Alt+K 可以显示当前可用的快捷键布局,帮助记忆键位。

Windows 用户的特殊注意事项

Windows 终端对键盘事件的处理与 Linux/macOS 有差异:

Ctrl+Z 在 Windows 终端上不会触发 POSIX 暂停信号,因此 OpenCode 默认将 Ctrl+Z 绑定到 input_undo(撤销输入),而不是 terminal_suspend(暂停终端)。

Shift+Enter 在 Windows Terminal 中默认不会发送正确的转义序列。如需使用 Shift+Enter 换行,需要在 Windows Terminal 的 settings.json 中添加:

{
  "actions": [
    {
      "command": { "action": "sendInput", "input": "\u001b[13;2u" },
      "id": "User.sendInput.ShiftEnterCustom"
    }
  ],
  "keybindings": [
    { "keys": "shift+enter", "id": "User.sendInput.ShiftEnterCustom" }
  ]
}

总结

OpenCode 的快捷键体系遵循两个原则:

键盘优先:所有操作都设计了键盘入口,无需鼠标

双重入口:快捷键和斜杠命令并存,渐进式学习

建议的学习路径:

  • 第一周:记住 Ctrl+X n/l/m/t 四个核心快捷键,其余用斜杠命令
  • 第二周:加入 TabEscCtrl+X u/r,形成安全网意识
  • 第三周:逐步加入其他快捷键,配合 Which Key 辅助记忆
  • 之后:根据使用习惯在 tui.json 中自定义键位

投入时间掌握这些快捷键,回报是每天几十次的微小效率提升——累积起来相当可观。毕竟在编程工作中,思考的连续性是最宝贵的资源,而快捷键的意义就在于保护这种连续性不被操作打断。