OpenCode 快捷键配置:自定义 TUI 所有按键绑定

OpenCode TUI 的所有快捷键都可以通过 tui.json 配置文件自定义。本文提供完整的键位参考表、Leader 键说明,以及在 Windows Terminal 等特殊终端中配置 Shift+Enter 的方法。

OpenCode 使用 tui.json 配置文件自定义快捷键。

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "leader": "ctrl+x",
    "session_new": "<leader>n",
    "session_list": "<leader>l"
  }
}

Leader 键

OpenCode 使用 leader 键避免与终端快捷键冲突。

默认 Leader 键为 ctrl+x。大多数操作需要先按 Leader 键,再按功能键。例如新建会话:先按 ctrl+x,再按 n

快捷键中用 <leader> 表示 Leader 键前缀。


完整键位参考

应用与界面

操作 默认快捷键
退出 ctrl+c,ctrl+d,<leader>q
打开编辑器 <leader>e
主题列表 <leader>t
侧边栏开关 <leader>b
状态视图 <leader>s

会话管理

操作 默认快捷键
导出会话 <leader>x
新建会话 <leader>n
会话列表 <leader>l
会话时间线 <leader>g
中断会话 escape
压缩会话 <leader>c
子代理会话导航 <leader>down, right, left, up

消息浏览

操作 默认快捷键
向上翻页 pageup,ctrl+alt+b
向下翻页 pagedown,ctrl+alt+f
向上滚行 ctrl+alt+y
向下滚行 ctrl+alt+e
向上半页 ctrl+alt+u
向下半页 ctrl+alt+d
回到顶部 ctrl+g,home
跳到底部 ctrl+alt+g,end
复制消息 <leader>y
撤销 <leader>u
重做 <leader>r
切换折叠 <leader>h

模型与 Agent

操作 默认快捷键
模型列表 <leader>m
切换最近模型 f2
反向切换最近模型 shift+f2
命令列表 ctrl+p
Agent 列表 <leader>a
切换下一个 Agent tab
切换上一个 Agent shift+tab

输入框编辑

操作 默认快捷键
提交消息 return
换行 shift+return,ctrl+return,alt+return,ctrl+j
清空输入 ctrl+c
粘贴 ctrl+v
移到行首 ctrl+a
移到行尾 ctrl+e
删除到行尾 ctrl+k
删除到行首 ctrl+u
删除单词(向后) ctrl+w,ctrl+backspace,alt+backspace
删除单词(向前) alt+d,alt+delete,ctrl+delete
撤销输入 ctrl+-,super+z
重做输入 ctrl+.,super+shift+z
向前移动单词 alt+f,alt+right,ctrl+right
向后移动单词 alt+b,alt+left,ctrl+left

禁用快捷键

将键值设为 "none" 即可禁用:

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

桌面应用快捷键

OpenCode 桌面版输入框内置 Readline/Emacs 风格快捷键,目前不支持通过 opencode.json 配置:

快捷键 动作
ctrl+a 移到当前行行首
ctrl+e 移到当前行行尾
ctrl+b 向后移动一个字符
ctrl+f 向前移动一个字符
alt+b 向后移动一个单词
alt+f 向前移动一个单词
ctrl+d 删除光标下的字符
ctrl+k 删除到行尾
ctrl+u 删除到行首
ctrl+w 删除上一个单词
alt+d 删除下一个单词
ctrl+g 取消弹出框 / 中止运行中的响应

配置 Shift+Enter(Windows Terminal)

某些终端默认不发送修饰键 + Enter 的组合,需要手动配置。

打开 Windows Terminal 的 settings.json(路径:%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json)。

在根级 actions 数组中添加:

{
  "command": {
    "action": "sendInput",
    "input": ""
  },
  "id": "User.sendInput.ShiftEnterCustom"
}

在根级 keybindings 数组中添加:

{
  "keys": "shift+enter",
  "id": "User.sendInput.ShiftEnterCustom"
}

保存后重启 Windows Terminal 或打开新标签页生效。


常见问题

Q: 我想把 Leader 键从 ctrl+x 改成其他键,会影响哪些快捷键?

A: 所有使用 <leader> 前缀的快捷键都会跟着变。修改 "leader" 字段即可,无需逐一修改引用 <leader> 的条目。

Q: 如何让 OpenCode 的快捷键不与 tmux 冲突?

A: 更改 leader 键为 tmux 不使用的组合,或者将冲突的操作设为 "none" 禁用,再重新绑定到其他键。

Q: tui.json 文件放在哪里?

A: 默认位置是 ~/.config/opencode/tui.json(全局配置),或者项目目录下的 .opencode/tui.json(项目级配置)。