OpenCode 的 TUI(终端用户界面)提供了丰富的快捷键体系,但官方文档的键位列表像一本未加注释的乐谱——看得见音符,不知道节奏。本文把 50+ 个快捷键按使用场景分类梳理,让你像弹钢琴一样自然地操作 OpenCode。
用熟这套键位之后,你会发现 ctrl+t 切换变体、ctrl+x 前缀键组合、f2 切换模型,这几个是最常用的「高频三件套」。
一、tui.json 放在哪?默认有没有? 链接到标题
这是第一个要搞清楚的问题。
tui.json 默认不存在,需要手动创建。 OpenCode 不会在安装时自动生成任何配置文件,所有配置都是可选的。你需要自己在正确的位置新建它。
配置文件有两个路径可选:
| 文件 | 位置 | 作用范围 |
|---|---|---|
~/.config/opencode/opencode.json | 全局配置目录 | 所有项目通用 |
<项目根>/opencode.json | 项目根目录 | 当前项目专用 |
键位配置可以直接写在 opencode.json 的 keybinds 字段中,不需要单独的 tui.json:
| |
官方文档中展示的 tui.json 实际上是一种命名惯例——你可以用 tui.json 单独存放键位配置,然后通过 opencode.json 引用,但绝大多数场景下直接在 opencode.json 中写 keybinds 字段更方便。
如果你执意要用独立的 tui.json,把它放在和 opencode.json 相同的目录下(~/.config/opencode/ 或项目根目录)。
二、前置知识:Leader 前导键 链接到标题
OpenCode 大量使用前导键(Leader) 模式,和 Vim/Tmux 的设计理念一致:先按前导键,再按功能键,避免和终端其他快捷键冲突。
默认前导键:ctrl+x
也就是说,文档中 "session_new": "<leader>n" 的意思就是:先按 ctrl+x,松手,再按 n。
你可以把 leader 改成别的键,比如 ctrl+space 或 ctrl+a:
| |
三、快捷键分类速查 链接到标题
3.1 会话管理(最常用) 链接到标题
| 功能 | 快捷键 | 对应命令 | 说明 |
|---|---|---|---|
| 新建会话 | ctrl+x n | /new | 清空当前对话,开新窗 |
| 会话列表 | ctrl+x l | /sessions | 列出所有历史会话,可切换 |
| 会话时间线 | ctrl+x g | — | 查看当前会话的消息时间线 |
| 导出会话 | ctrl+x x | /export | 导出为 Markdown 并在编辑器中打开 |
| 压缩会话 | ctrl+x c | /compact | 压缩上下文释放 token,适合长对话 |
| 中断响应 | escape | — | 中断正在生成中的模型输出 |
| 退出程序 | ctrl+x q 或 ctrl+c + ctrl+d | /exit | 退出 OpenCode |
3.2 模型与变体切换(高频) 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 模型列表 | ctrl+x m | 弹出可用模型选择列表 |
| 循环切模型(最近) | f2 | 在最近使用的模型间切换 |
| 反向循环切模型 | shift+f2 | 反向循环最近使用的模型 |
| 循环切模型(收藏) | 默认 none(需自设) | 在收藏的模型间切换 |
| 变体循环 | ctrl+t | 切换模型变体,如开/关 thinking/reasoning |
| 变体列表 | 默认 none | 弹出变体选择列表 |
variant_cycle(ctrl+t)是深度思考模型的开关。
Claude Sonnet 支持 extended thinking,按 ctrl+t 在「普通模式」和「深度思考模式」之间切换——不用重新选择模型,一键搞定。
DeepSeek V4 Pro 支持思考强度控制,按 ctrl+t 在以下等级间循环:low → medium → high → max。注意 DeepSeek 的 API 实现中,low 和 medium 实际都会被映射为 high(参见 DeepSeek 思考模式文档),所以表现上有差异的只有 high 和 max 两档。由于 OpenCode 属于复杂 Agent 类请求,DeepSeek API 在思考模式下会自动将 effort 设为 max(即默认使用最强推理等级),你也可以手动按 ctrl+t 降到 high 来节省 token 提升速度。
3.3 代理(Agent)切换 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 代理列表 | ctrl+x a | 弹出可用代理列表 |
| 切换到下一个代理 | tab | 循环切换代理 |
| 切换到上一个代理 | shift+tab | 反向循环切换代理 |
3.4 消息导航(会话内滚动) 链接到标题
OpenCode 的消息区支持 U 列(UP/DOWN)导航,键位设计灵感来自终端翻页习惯:
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 上一页(消息) | pageup 或 ctrl+alt+b | 消息区向上翻页 |
| 下一页(消息) | pagedown 或 ctrl+alt+f | 消息区向下翻页 |
| 上半页 | ctrl+alt+u | 消息区向上半页 |
| 下半页 | ctrl+alt+d | 消息区向下半页 |
| 上一行 | ctrl+alt+y | 消息区向上滚一行 |
| 下一行 | ctrl+alt+e | 消息区向下滚一行 |
| 跳到开头 | ctrl+g 或 home | 跳到对话开始位置 |
| 跳到最后 | ctrl+alt+g 或 end | 跳到最新消息 |
| 复制消息 | ctrl+x y | 复制当前消息 |
| 撤销消息 | ctrl+x u | 撤销最后一条用户消息及后续响应 |
| 重做消息 | ctrl+x r | 重做之前撤销的消息 |
| 显示/隐藏思考块 | ctrl+x h | 切换 thinking 块的显示 |
特别说明
ctrl+x u(undo)和ctrl+x r(redo):这两个操作不仅撤销/重做消息,还会还原文件更改。内部使用 Git 来管理文件变更,所以你的项目必须是 Git 仓库才能正常使用 undo/redo。
3.5 输入框编辑(Emacs/Readline 风格) 链接到标题
OpenCode 的输入框支持一整套文本编辑快捷键,熟悉终端的人会很顺手:
光标移动 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 左移一个字符 | left 或 ctrl+b | — |
| 右移一个字符 | right 或 ctrl+f | — |
| 左移一个单词 | alt+b 或 alt+left | 单词级跳转 |
| 右移一个单词 | alt+f 或 alt+right | 单词级跳转 |
| 行首 | ctrl+a | 跳到当前行开头(视觉行) |
| 行尾 | ctrl+e | 跳到当前行末尾(视觉行) |
| 视觉行首(第一列) | alt+a | 跳到真实行首第一个非空字符 |
| 视觉行尾 | alt+e | 跳到真实行尾 |
| 缓冲区开头 | home | 跳到整个输入的起始位置 |
| 缓冲区末尾 | end | 跳到整个输入的末尾位置 |
删除操作 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 删除前一个字符 | backspace | — |
| 删除后一个字符 | ctrl+d 或 delete | — |
| 删除前一个单词 | ctrl+w 或 ctrl+backspace | — |
| 删除后一个单词 | alt+d 或 alt+delete | — |
| 删除到行尾 | ctrl+k | 从光标位置删到行尾 |
| 删除到行首 | ctrl+u | 从光标位置删到行首 |
| 删除整行 | ctrl+shift+d | 删除光标所在行 |
选择与粘贴 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 粘贴 | ctrl+v | 粘贴剪贴板内容 |
| 提交 | enter | 发送消息 |
| 换行 | shift+enter 或 ctrl+j | 输入多行内容 |
注意:某些终端(如 Windows Terminal)默认不发送带修饰键的 Enter。如果你发现
shift+enter换行无效,需要配置终端发送转义序列,详见官方文档。
历史记录 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 上一条历史 | up | 浏览之前输入的消息 |
| 下一条历史 | down | 浏览之后的消息 |
3.6 界面控制 链接到标题
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 命令面板 | ctrl+p | 搜索并执行所有命令 |
| 模型列表 | ctrl+x m | 切换模型 |
| 主题列表 | ctrl+x t | 切换主题 |
| 侧边栏开关 | ctrl+x b | 切换侧边栏显示 |
| 外部编辑器 | ctrl+x e | 用外部编辑器编写消息 |
| 状态视图 | ctrl+x s | 查看会话/模型状态 |
| 帮助 | ctrl+x h | 弹出帮助面板 |
| 挂起终端 | ctrl+z | 挂起 OpenCode 到后台 |
3.7 输入框选择(Shift 组合键) 链接到标题
按住 shift 配合光标移动键可以选中文本:
| 功能 | 快捷键 |
|---|---|
| 向左选择 | shift+left |
| 向右选择 | shift+right |
| 向上选择 | shift+up |
| 向下选择 | shift+down |
| 选择到行首 | ctrl+shift+a |
| 选择到行尾 | ctrl+shift+e |
| 选择到缓冲区首 | shift+home |
| 选择到缓冲区尾 | shift+end |
四、如何自定义快捷键 链接到标题
在 opencode.json 的 keybinds 字段中覆盖任意键位。以禁用某个快捷键为例,设为 "none":
| |
多个按键可以绑定同一个功能(逗号分隔):
| |
五、实用建议 链接到标题
- 核心三键优先记熟:
ctrl+t(切换变体)+f2(切换模型)+tab(切换代理),这三者日常最高频 - Leader 键不要乱改:
ctrl+x和大多数终端程序不冲突,保持默认即可 - Undo 需要 Git:
ctrl+x u/ctrl+x r依赖 Git 管理文件变更,项目中必须有.git目录 - 滚动用 pageup/pagedown:比
ctrl+alt组合键更顺手,且所有终端都支持 - Emacs 快捷键在输入框完全可用:
ctrl+a/e/w/k/u都可以直接用,终端老手的肌肉记忆完全不用改