Skip to content

OpenCode 快捷键配置详解

OpenCode 提供了一套完整的键盘快捷键系统,涵盖应用控制、会话管理、消息浏览、模型切换和输入编辑等各类操作。

所有快捷键均可通过 tui.json 文件进行自定义。


配置文件

快捷键配置写在 tui.json 文件的 keybinds 字段下,每条记录的键名为操作名称,值为对应的快捷键:

实例

json
{

  "$schema": "https://opencode.ai/tui.json",

  "keybinds": {

    "leader": "ctrl+x",          // 前导键设置(见下方说明)

    "session_new": "<leader>n",  // 新建会话:先按前导键,再按 n

    "model_list": "<leader>m",   // 打开模型列表:先按前导键,再按 m

    "session_compact": "none"    // 将值设为 "none" 可禁用该快捷键

  }

}

一个操作可以绑定多个快捷键,用英文逗号分隔,任意一个触发即可执行该操作:

实例

json
{

  "$schema": "https://opencode.ai/tui.json",

  "keybinds": {

    // 以下写法表示:按 pageup 或按 ctrl+alt+b,都可以向上翻页

    "messages_page_up": "pageup,ctrl+alt+b"

  }

}

前导键(Leader Key)

OpenCode 的大多数快捷键采用**前导键(Leader Key)**机制:先按下前导键,再按功能键,两键组合触发对应操作。这样设计的好处是避免与终端本身的快捷键产生冲突。

默认前导键为 ctrl+x。例如,新建会话的快捷键是 <leader>n,实际操作为:先按 ctrl+x,再按 n

你可以将前导键改为任意组合键:

实例

json
{

  "$schema": "https://opencode.ai/tui.json",

  "keybinds": {

    "leader": "ctrl+x"    // 修改前导键为其他按键,如 "ctrl+space"、"alt+x" 等

                          // 配置中的 <leader> 占位符会自动替换为这里设置的按键

  }

}

不一定必须使用前导键机制来设置快捷键——也可以直接绑定普通按键或组合键。但建议优先使用前导键,以避免与终端快捷键冲突。


禁用快捷键

将任意快捷键的值设为 "none" 即可禁用该操作,禁用后按任何键都不会触发它:

实例

json
{

  "$schema": "https://opencode.ai/tui.json",

  "keybinds": {

    "session_compact": "none",    // 禁用"压缩会话"快捷键

    "scrollbar_toggle": "none",   // 禁用"切换滚动条"快捷键

    "tips_toggle": "none"         // 禁用"切换提示"快捷键

  }

}

完整快捷键列表

1、应用与界面

操作名称默认快捷键说明
app_exitctrl+c, ctrl+d, <leader>q退出 OpenCode
editor_open<leader>e用外部编辑器打开当前输入内容
theme_list<leader>t打开主题列表,切换界面主题
sidebar_toggle<leader>b显示或隐藏侧边栏
scrollbar_toggle无(默认禁用)显示或隐藏滚动条
username_toggle无(默认禁用)显示或隐藏用户名
status_view<leader>s查看当前状态信息
tool_details无(默认禁用)查看工具调用详情
command_listctrl+p打开命令面板,搜索所有可用命令
tips_toggle<leader>h显示或隐藏使用提示
display_thinking无(默认禁用)显示或隐藏模型的思考过程
terminal_suspendctrl+z挂起终端(将 OpenCode 放到后台,回到 shell;输入 fg 可恢复)
terminal_title_toggle无(默认禁用)显示或隐藏终端标题栏

2、会话管理

操作名称默认快捷键说明
session_new<leader>n新建一个会话
session_list<leader>l查看所有历史会话列表
session_export<leader>x导出当前会话内容
session_timeline<leader>g查看当前会话的时间线
session_fork无(默认禁用)从当前位置创建一个分支会话
session_rename无(默认禁用)重命名当前会话
session_share无(默认禁用)分享当前会话
session_unshare无(默认禁用)取消分享当前会话
session_interruptescape中断当前正在运行的响应
session_compact<leader>c压缩当前会话上下文,减少 Token 占用
session_child_first<leader>↓跳转到第一个子会话
session_child_cycle<leader>→在子会话间向前循环切换
session_child_cycle_reverse<leader>←在子会话间向后循环切换
session_parent<leader>↑返回父会话

3、消息浏览

操作名称默认快捷键说明
messages_page_uppageup, ctrl+alt+b向上翻一页消息
messages_page_downpagedown, ctrl+alt+f向下翻一页消息
messages_line_upctrl+alt+y向上滚动一行
messages_line_downctrl+alt+e向下滚动一行
messages_half_page_upctrl+alt+u向上滚动半页
messages_half_page_downctrl+alt+d向下滚动半页
messages_firstctrl+g, home跳转到最早的第一条消息
messages_lastctrl+alt+g, end跳转到最新的最后一条消息
messages_next无(默认禁用)跳转到下一条消息
messages_previous无(默认禁用)跳转到上一条消息
messages_last_user无(默认禁用)跳转到最后一条用户消息
messages_copy<leader>y复制当前消息内容到剪贴板
messages_undo<leader>u撤销上一步操作
messages_redo<leader>r重做撤销的操作
messages_toggle_conceal<leader>h折叠或展开消息中的隐藏内容

4、模型与代理

操作名称默认快捷键说明
model_list<leader>m打开模型列表,选择切换当前使用的模型
model_cycle_recentf2在最近使用过的模型中向前循环切换
model_cycle_recent_reverseshift+f2在最近使用过的模型中向后循环切换
model_cycle_favorite无(默认禁用)在收藏的模型中向前循环切换
model_cycle_favorite_reverse无(默认禁用)在收藏的模型中向后循环切换
variant_cyclectrl+t在当前模型的变体(如 thinking 模式)之间循环切换
agent_list<leader>a打开代理列表,选择切换当前使用的代理
agent_cycletab向前循环切换代理
agent_cycle_reverseshift+tab向后循环切换代理

5、输入框编辑

操作名称默认快捷键说明
input_submitreturn发送当前输入内容
input_newlineshift+return, ctrl+return, alt+return, ctrl+j在输入框中插入换行(不发送)
input_clearctrl+c清空输入框内容
input_pastectrl+v粘贴剪贴板内容到输入框
input_move_leftleft, ctrl+b光标向左移动一个字符
input_move_rightright, ctrl+f光标向右移动一个字符
input_move_upup光标向上移动一行
input_move_downdown光标向下移动一行
input_word_forwardalt+f, alt+right, ctrl+right光标向前跳过一个单词
input_word_backwardalt+b, alt+left, ctrl+left光标向后跳过一个单词
input_line_homectrl+a移动到当前行的开头
input_line_endctrl+e移动到当前行的末尾
input_visual_line_homealt+a移动到当前视觉行(换行显示的行)的开头
input_visual_line_endalt+e移动到当前视觉行的末尾
input_buffer_homehome跳转到整个输入框内容的最开头
input_buffer_endend跳转到整个输入框内容的最末尾
input_delete_to_line_endctrl+k删除从光标到当前行末尾的所有内容
input_delete_to_line_startctrl+u删除从当前行开头到光标的所有内容
input_delete_linectrl+shift+d删除光标所在的整行
input_backspacebackspace, shift+backspace删除光标前一个字符
input_deletectrl+d, delete, shift+delete删除光标后一个字符
input_delete_word_forwardalt+d, alt+delete, ctrl+delete删除光标后一个单词
input_delete_word_backwardctrl+w, ctrl+backspace, alt+backspace删除光标前一个单词
input_undoctrl+-, super+z撤销输入框中的上一步编辑
input_redoctrl+., super+shift+z重做撤销的编辑

6、文本选择

操作名称默认快捷键说明
input_select_leftshift+left向左选中一个字符
input_select_rightshift+right向右选中一个字符
input_select_upshift+up向上选中一行
input_select_downshift+down向下选中一行
input_select_word_forwardalt+shift+f, alt+shift+right向前选中一个单词
input_select_word_backwardalt+shift+b, alt+shift+left向后选中一个单词
input_select_line_homectrl+shift+a从光标位置选中到当前行开头
input_select_line_endctrl+shift+e从光标位置选中到当前行末尾
input_select_visual_line_homealt+shift+a从光标位置选中到当前视觉行开头
input_select_visual_line_endalt+shift+e从光标位置选中到当前视觉行末尾
input_select_buffer_homeshift+home从光标位置选中到输入框最开头
input_select_buffer_endshift+end从光标位置选中到输入框最末尾

7、输入历史

操作名称默认快捷键说明
history_previousup调出上一条历史输入(输入框为空时有效)
history_nextdown调出下一条历史输入

桌面版内置输入快捷键

OpenCode 桌面版的提示词输入框额外内置了一套 Readline / Emacs 风格的文本编辑快捷键,这些快捷键为内置功能,无法通过 tui.json 修改或禁用

快捷键操作
ctrl+a移动到当前行的开头
ctrl+e移动到当前行的末尾
ctrl+b光标向后移动一个字符
ctrl+f光标向前移动一个字符
alt+b光标向后移动一个单词
alt+f光标向前移动一个单词
ctrl+d删除光标所在位置的字符
ctrl+k删除从光标到行尾的内容
ctrl+u删除从光标到行首的内容
ctrl+w删除前一个单词
alt+d删除后一个单词
ctrl+t交换光标前后两个字符的位置
ctrl+g取消当前弹出窗口,或中止正在运行的响应

配置 Shift+Enter 换行

部分终端默认不会将带修饰键的 Enter(如 Shift+Enter)作为独立按键发送,导致在 OpenCode 中按 Shift+Enter 无法换行而是直接发送消息。需要在终端中手动配置该按键的转义序列。

Windows Terminal 配置方法

**第一步:**打开 Windows Terminal 的 settings.json 文件,路径为:

bash
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json

**第二步:**在文件的根级 actions 数组中添加以下配置,定义一个发送 Shift+Enter 转义序列的动作:

实例

bash
"actions": [

  {

    "command": {

      "action": "sendInput",

      "input": "\u001b[13;2u"    // Shift+Enter 对应的标准转义序列(CSI u 格式)

    },

    "id": "User.sendInput.ShiftEnterCustom"

  }

]

**第三步:**在文件的根级 keybindings 数组中添加按键绑定,将 Shift+Enter 映射到上面定义的动作:

实例

bash
"keybindings": [

  {

    "keys": "shift+enter",

    "id": "User.sendInput.ShiftEnterCustom"

  }

]

**第四步:**保存 settings.json 文件后,重启 Windows Terminal 或打开一个新标签页使配置生效。

如果你使用的是其他终端(如 iTerm2、Kitty、Alacritty 等),请参考对应终端的文档,找到"按键映射"或"Key bindings"相关设置,将 Shift+Enter 配置为发送 \u001b[13;2u 转义序列即可。

AI 思考中...

OpenCode 主题

OpenCode 自定义命令

基于 VitePress 构建,部署于 GitHub Pages