OpenCode 的 TUI(终端用户界面)提供了丰富的快捷键体系,但官方文档的键位列表像一本未加注释的乐谱——看得见音符,不知道节奏。本文把 50+ 个快捷键按使用场景分类梳理,让你像弹钢琴一样自然地操作 OpenCode。

用熟这套键位之后,你会发现 ctrl+t 切换变体、ctrl+x 前缀键组合、f2 切换模型,这几个是最常用的「高频三件套」。


一、tui.json 放在哪?默认有没有? 链接到标题

这是第一个要搞清楚的问题。

tui.json 默认不存在,需要手动创建。 OpenCode 不会在安装时自动生成任何配置文件,所有配置都是可选的。你需要自己在正确的位置新建它。

配置文件有两个路径可选:

文件位置作用范围
~/.config/opencode/opencode.json全局配置目录所有项目通用
<项目根>/opencode.json项目根目录当前项目专用

键位配置可以直接写在 opencode.jsonkeybinds 字段中,不需要单独的 tui.json

1
2
3
4
5
6
7
8
{
  "$schema": "https://opencode.ai/config.json",
  "keybinds": {
    "variant_cycle": "ctrl+t",
    "model_cycle_recent": "f2",
    "agent_cycle": "tab"
  }
}

官方文档中展示的 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+spacectrl+a

1
2
3
4
5
{
  "keybinds": {
    "leader": "ctrl+space"
  }
}

三、快捷键分类速查 链接到标题

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 qctrl+c + ctrl+d/exit退出 OpenCode

3.2 模型与变体切换(高频) 链接到标题

功能快捷键说明
模型列表ctrl+x m弹出可用模型选择列表
循环切模型(最近)f2在最近使用的模型间切换
反向循环切模型shift+f2反向循环最近使用的模型
循环切模型(收藏)默认 none(需自设)在收藏的模型间切换
变体循环ctrl+t切换模型变体,如开/关 thinking/reasoning
变体列表默认 none弹出变体选择列表

variant_cyclectrl+t)是深度思考模型的开关。

Claude Sonnet 支持 extended thinking,按 ctrl+t 在「普通模式」和「深度思考模式」之间切换——不用重新选择模型,一键搞定。

DeepSeek V4 Pro 支持思考强度控制,按 ctrl+t 在以下等级间循环:lowmediumhighmax。注意 DeepSeek 的 API 实现中,lowmedium 实际都会被映射为 high(参见 DeepSeek 思考模式文档),所以表现上有差异的只有 highmax 两档。由于 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)导航,键位设计灵感来自终端翻页习惯:

功能快捷键说明
上一页(消息)pageupctrl+alt+b消息区向上翻页
下一页(消息)pagedownctrl+alt+f消息区向下翻页
上半页ctrl+alt+u消息区向上半页
下半页ctrl+alt+d消息区向下半页
上一行ctrl+alt+y消息区向上滚一行
下一行ctrl+alt+e消息区向下滚一行
跳到开头ctrl+ghome跳到对话开始位置
跳到最后ctrl+alt+gend跳到最新消息
复制消息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 的输入框支持一整套文本编辑快捷键,熟悉终端的人会很顺手:

光标移动 链接到标题

功能快捷键说明
左移一个字符leftctrl+b
右移一个字符rightctrl+f
左移一个单词alt+balt+left单词级跳转
右移一个单词alt+falt+right单词级跳转
行首ctrl+a跳到当前行开头(视觉行)
行尾ctrl+e跳到当前行末尾(视觉行)
视觉行首(第一列)alt+a跳到真实行首第一个非空字符
视觉行尾alt+e跳到真实行尾
缓冲区开头home跳到整个输入的起始位置
缓冲区末尾end跳到整个输入的末尾位置

删除操作 链接到标题

功能快捷键说明
删除前一个字符backspace
删除后一个字符ctrl+ddelete
删除前一个单词ctrl+wctrl+backspace
删除后一个单词alt+dalt+delete
删除到行尾ctrl+k从光标位置删到行尾
删除到行首ctrl+u从光标位置删到行首
删除整行ctrl+shift+d删除光标所在行

选择与粘贴 链接到标题

功能快捷键说明
粘贴ctrl+v粘贴剪贴板内容
提交enter发送消息
换行shift+enterctrl+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.jsonkeybinds 字段中覆盖任意键位。以禁用某个快捷键为例,设为 "none"

1
2
3
4
5
6
7
8
{
  "$schema": "https://opencode.ai/config.json",
  "keybinds": {
    "session_compact": "none",
    "variant_cycle": "ctrl+shift+t",
    "model_cycle_recent": "alt+right"
  }
}

多个按键可以绑定同一个功能(逗号分隔):

1
2
3
4
5
{
  "keybinds": {
    "input_submit": "return,ctrl+enter"
  }
}

五、实用建议 链接到标题

  1. 核心三键优先记熟ctrl+t(切换变体)+ f2(切换模型)+ tab(切换代理),这三者日常最高频
  2. Leader 键不要乱改ctrl+x 和大多数终端程序不冲突,保持默认即可
  3. Undo 需要 Gitctrl+x u / ctrl+x r 依赖 Git 管理文件变更,项目中必须有 .git 目录
  4. 滚动用 pageup/pagedown:比 ctrl+alt 组合键更顺手,且所有终端都支持
  5. Emacs 快捷键在输入框完全可用ctrl+a/e/w/k/u 都可以直接用,终端老手的肌肉记忆完全不用改

参考 链接到标题