OpenCode 快捷键

OpenCode 提供了一套完整的快捷键系统,支持通过 tui.json 自定义,从而提升终端操作效率。


快捷键配置

所有快捷键均通过 tui.json 进行配置:

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "leader": "ctrl+x",
    "app_exit": "ctrl+c,ctrl+d,<leader>q",
    "editor_open": "<leader>e",
    "theme_list": "<leader>t",
    "sidebar_toggle": "<leader>b",
    "status_view": "<leader>s",
    "session_new": "<leader>n",
    "session_list": "<leader>l",
    "session_export": "<leader>x",
    "messages_copy": "<leader>y",
    "messages_undo": "<leader>u",
    "messages_redo": "<leader>r",
    "model_list": "<leader>m",
    "agent_list": "<leader>a",
    "command_list": "ctrl+p",
    "agent_cycle": "tab",
    "agent_cycle_reverse": "shift+tab",
    "input_submit": "return",
    "input_newline": "shift+return,ctrl+return",
    "input_clear": "ctrl+c"
  }
}

说明:

  • 每个字段对应一个操作
  • 多个快捷键用逗号分隔
  • 支持组合键(如 ctrl、shift、alt)

前导键(Leader Key)

OpenCode 使用 前导键(leader) 来组织快捷键,避免与终端冲突。

默认前导键:

ctrl+x

使用方式示例:

  • 新建会话:ctrl+x → n
  • 打开主题:ctrl+x → t
  • 导出会话:ctrl+x → x

您可以自定义前导键:

{
  "keybinds": {
    "leader": "ctrl+a"
  }
}

禁用快捷键

如果某个快捷键与终端冲突,可以将其禁用:

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

说明:

  • "none" 表示禁用该功能的快捷键

常用快捷键分类

会话管理

  • 新建会话:<leader>n
  • 会话列表:<leader>l
  • 导出会话:<leader>x
  • 压缩上下文:<leader>c

消息操作

  • 复制消息:<leader>y
  • 撤销:<leader>u
  • 重做:<leader>r

模型与代理

  • 模型列表:<leader>m
  • 代理列表:<leader>a
  • 切换代理:Tab

界面控制

  • 主题切换:<leader>t
  • 侧边栏:<leader>b
  • 状态视图:<leader>s

输入框快捷键(Readline 风格)

OpenCode 输入框支持类似 Emacs / Readline 的快捷键:

快捷键 操作
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 配置(重要)

部分终端默认不支持 Shift+Enter,需要手动配置。

Windows Terminal

编辑配置文件:

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

添加 actions:

"actions": [
  {
    "command": {
      "action": "sendInput",
      "input": "\u001b[13;2u"
    },
    "id": "User.sendInput.ShiftEnterCustom"
  }
]

添加 keybindings:

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

保存后重启终端即可生效。


总结

  • 快捷键完全可自定义
  • 推荐使用 leader 统一管理
  • 支持 Emacs 风格输入操作
  • 可通过 none 禁用冲突快捷键

合理配置快捷键可以显著提升 OpenCode 在终端中的使用效率。