使用 OpenCode 一段时间后,你会发现一个明显的现象:同样的任务,有的人三秒完成切换,有的人却要在菜单里翻来翻去。差距就在于对快捷键和 TUI(终端用户界面)操作的熟练程度。
本文将系统梳理 OpenCode 的快捷键体系、TUI 命令和效率技巧,帮你把常用操作变成肌肉记忆。
OpenCode 是一款运行在终端中的 AI 编程助手,它的核心理念是让你无需离开终端就能完成编码工作。所有操作都设计为键盘驱动,这意味着:
OpenCode 的快捷键系统采用 Leader Key 模式设计,与 Vim 生态实现了良好兼容。
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 对之前的对话进行摘要,从而继续有效工作。
| 操作 | 快捷键 | 说明 |
|------|--------|------|
| 模型列表 | 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 u 和 Ctrl+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 中自定义任何快捷键。配置文件位于:
~/.config/opencode/tui.json%APPDATA%\opencode\tui.json下面是几个常见的自定义场景:
如果你习惯 Vim 的 Ctrl+W 或 Space 作为 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.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
}
}
"auto" 自动适终端宽度,"stacked" 强制上下分栏false 可以保留终端的原生选择行为@ 引用文件输入 @ 可以模糊搜索项目中的文件,OpenCode 会自动将文件内容加入对话上下文:
How is auth handled in @packages/functions/src/api/auth.ts?
这比手动复制文件路径快得多,也避免了路径拼写错误。
! 执行 Shell 命令在消息开头输入 !,OpenCode 会将后续内容作为 shell 命令执行,并将结果加入对话:
!git log --oneline -10
这在分析项目状态时非常实用,省去了切换到另一个终端窗口的麻烦。
Ctrl+P 打开命令面板,可以模糊搜索并执行几乎所有操作——相当于一个"万能入口",忘记快捷键时按它就对了。
如果你使用 Which Key 风格的界面,Ctrl+Alt+K 可以显示当前可用的快捷键布局,帮助记忆键位。
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 四个核心快捷键,其余用斜杠命令Tab、Esc、Ctrl+X u/r,形成安全网意识tui.json 中自定义键位投入时间掌握这些快捷键,回报是每天几十次的微小效率提升——累积起来相当可观。毕竟在编程工作中,思考的连续性是最宝贵的资源,而快捷键的意义就在于保护这种连续性不被操作打断。