跳到正文
FunCoding

搜索

搜索文档、智能体、博客、Skill 和 MCP

自定义键盘快捷键

用 ~/.claude/keybindings.json 重新绑定快捷键:文件结构、全部上下文与动作及默认键、按键语法、解绑、保留快捷键、终端冲突、文本字段、vim 模式与校验。

Claude Code 支持自定义键盘快捷键。运行 /keybindings 创建或打开你的配置文件 ~/.claude/keybindings.json。注意:下面表里的默认键和「需要 vX.Y.Z 或更高」之类的版本说明来自官方文档核实时的状态,会随版本变化,以官方为准。

配置文件

快捷键配置文件是一个带 bindings 数组的对象,每个块指定一个上下文和一张从按键到动作的映射。对键位文件的改动会被自动检测并应用,无需重启 Claude Code。

字段说明
$schema可选,用于编辑器自动补全的 JSON Schema URL
$docs可选,文档 URL
bindings按上下文分的绑定块数组

下面的例子在聊天上下文里把 Ctrl+E 绑定为打开外部编辑器,并解绑 Ctrl+S:

{
  "$schema": "https://www.schemastore.org/claude-code-keybindings.json",
  "$docs": "https://code.claude.com/docs/en/keybindings",
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+e": "chat:externalEditor",
        "ctrl+s": null
      }
    }
  ]
}

上下文

每个绑定块指定它适用的上下文:

上下文说明
Global在应用的任何地方生效
Chat主聊天输入区
Autocomplete自动补全菜单打开时
Settings设置菜单
Confirmation权限和确认对话框
Tabs标签页导航组件
Help帮助菜单可见时
Transcript对话记录查看器
HistorySearch历史搜索模式(Ctrl+R)
Task有任务在前台运行时
ThemePicker主题选择对话框
Attachments选择对话框里的图片附件导航
Footer页脚指示器导航(任务、团队、diff、artifact)
MessageSelector回退和总结对话框里的消息选择
DiffDialogdiff 查看器导航
DiffPaneldiff 面板打开时
ModelPicker模型选择器的 effort 级别
EffortSlider由 /effort 打开的 effort 滑块
Select通用的选择/列表组件
Plugin插件对话框(浏览、发现、管理)
Agents智能体视图(claude agents)
Scroll全屏模式下的对话滚动和文本选择

v2.1.205 之前,存在一个用于 /doctor 诊断界面的 Doctor 上下文和 doctor:fix 动作。

可用的动作

动作采用 namespace:action 格式,例如发送消息的 chat:submit 或显示任务列表的 app:toggleTodos。每个上下文都有特定的可用动作。

应用动作(Global 上下文)

动作默认键说明
app:interruptCtrl+C取消当前操作
app:exitCtrl+D退出 Claude Code;800 毫秒内按两次确认
app:redraw(未绑定)强制终端重绘
app:toggleTodosCtrl+T切换 Claude 待办清单的可见性;这不是 /tasks 后台任务视图
app:toggleTranscriptCtrl+O切换详细转录

历史动作

动作默认键说明
history:searchCtrl+R打开历史搜索
history:previousUp上一条历史
history:nextDown下一条历史

聊天动作(Chat 上下文)

动作默认键说明
chat:cancelEscape取消当前输入
chat:clearInputCtrl+L强制完整重绘屏幕,保留输入和对话
chat:clearScreenCmd+K与 chat:clearInput 相同;Cmd+K 在 iTerm2 和 Terminal.app 上的行为见全屏页「清除对话」
chat:killAgentsCtrl+X Ctrl+K停止本会话中所有运行的后台子智能体,并在会话剩余时间里关闭 artifact 自动回复
chat:cycleModeShift+Tab*循环切换权限模式
chat:modelPickerMeta+P打开模型选择器
chat:fastModeMeta+O切换快速模式
chat:thinkingToggleMeta+T切换扩展思考
chat:submitEnter提交消息
chat:queueSubmitCtrl+X Enter提交消息并标记为等待轮到它:Claude 工作期间 Claude Code 把它排队而绝不打断当前轮;与 chat:submit 不同,即使有自动补全建议高亮它也提交草稿(需要 v2.1.247 或更高)
chat:sendNowCtrl+Enter、Ctrl+X Ctrl+S立即发送你排队的消息和你的草稿;没有任务运行时,该键提交草稿,在 shell 模式下只把命令排队;不报告扩展键的终端会把 Ctrl+Enter 当作普通 Enter 送达,所以 Ctrl+X Ctrl+S 是在任何终端都能用的绑定(需要 v2.1.275 或更高)
chat:newlineCtrl+J插入换行而不提交
chat:undoCtrl+_、Ctrl+Shift+-撤销上一个操作
chat:externalEditorCtrl+G、Ctrl+X Ctrl+E在外部编辑器里打开;智能体视图的 dispatch 输入也遵循此动作的单键绑定
chat:stashCtrl+S暂存当前提示
chat:imagePasteCtrl+V(Windows 和 WSL 上是 Alt+V)从剪贴板粘贴图片;WSL 上两个快捷键默认都绑定

*在没有 VT 模式的 Windows 上(Node < 24.2.0 / < 22.17.0,Bun < 1.2.23),默认是 Meta+M。

自动补全动作(Autocomplete 上下文)

动作默认键说明
autocomplete:acceptTab接受建议
autocomplete:dismissEscape关闭菜单
autocomplete:previousUp上一个建议
autocomplete:nextDown下一个建议

确认动作(Confirmation 上下文)

动作默认键说明
confirm:yesEnter确认操作
confirm:noEscape拒绝操作
confirm:previousUp上一个选项
confirm:nextDown下一个选项
confirm:nextFieldTab下一个字段
confirm:previousField(未绑定)上一个字段
confirm:toggleSpace切换选择
confirm:cycleModeShift+Tab*循环切换权限模式;在文件权限提示上,关闭已打开的评论字段,没有字段打开时,选择「本会话剩余时间允许该操作」的选项(提示提供该选项时)

v2.1.257 之前,有一个默认绑定 Ctrl+E 的 confirm:toggleExplanation 动作,在 Bash 和 PowerShell 权限提示上显示模型生成的命令解释。

对话框用 confirm:yes 和 confirm:no 来接受和取消,即使它们问的不是是/否问题。如果你在这个上下文里绑定了单个字母如 y 或 n,这个字母也会作用于从不把它显示为按键的对话框;把 y 和 n 显示为按键的对话框自己读取这些字母,不需要绑定。大多数对话框里,连按两次 Ctrl+C 或 Ctrl+D 会关闭对话框而不是退出 Claude Code,第一次按键后的提示会说明第二次是关闭对话框还是退出;这两个键是保留的,不能重绑定。

下面的例子把 y 绑定到 confirm:yes,把 n 绑定到 confirm:no:

{
  "bindings": [
    {
      "context": "Confirmation",
      "bindings": {
        "y": "confirm:yes",
        "n": "confirm:no"
      }
    }
  ]
}

有了这些绑定,当文本字段有焦点时,y 和 n 仍然作为字母输入。v2.1.280 之前,y 默认也绑定到 confirm:yes、n 绑定到 confirm:no;如果你在 v2.1.280 之前用 /keybindings 创建了 keybindings.json,文件里会列出这两个绑定,在你删掉这两行之前它们一直有效。

权限动作

动作默认键说明
permission:toggleDebug(未绑定)切换权限调试信息;之前默认的 Ctrl+D 在 v2.1.146 被移除,因为它遮蔽了 app:exit

转录动作(Transcript 上下文)

动作默认键说明
transcript:toggleShowAllCtrl+E切换显示所有内容
transcript:exitq、Ctrl+C、Escape退出转录视图

transcript:toggleShowAll 只适用于经典渲染器;在全屏渲染里,转录查看器不提供显示全部的开关。

历史搜索动作(HistorySearch 上下文)

动作默认键说明
historySearch:nextCtrl+R下一个匹配
historySearch:acceptEscape、Tab接受选择
historySearch:cancelCtrl+C取消搜索
historySearch:executeEnter执行选中的命令
historySearch:cycleScopeCtrl+S循环范围:会话、项目、全部

historySearch:next、accept、cancel 和 execute 的默认键适用于经典渲染器里的内联历史搜索,它总是搜索所有项目的提示。historySearch:cycleScope 只在全屏渲染里生效:那里 Ctrl+R 打开的是搜索对话框,Ctrl+S 循环它的范围。对话框的其他键是固定的、不能重绑定:Enter 或 Tab 把高亮的匹配放进提示输入框,Esc 取消。

任务动作(Task 上下文)

动作默认键说明
task:backgroundCtrl+B、Ctrl+X Ctrl+B把当前任务放到后台;Ctrl+X Ctrl+B 和弦避免了与 tmux 前缀的冲突

主题动作(ThemePicker 上下文)

动作默认键说明
theme:toggleSyntaxHighlightingCtrl+T切换语法高亮

帮助动作(Help 上下文)

动作默认键说明
help:dismissEscape关闭帮助菜单

标签页动作(Tabs 上下文)

动作默认键说明
tabs:nextTab、Right下一个标签页
tabs:previousShift+Tab、Left上一个标签页

在带标签页的对话框里,标签行有焦点时,tabs:next 和 tabs:previous 切换标签页;在 /help 和 /sandbox 这样的一些对话框里,切换标签页的键在标签内容内部也有效。Up 和 Down 在标签行和标签内容之间移动焦点,内容里的列表只在有焦点时才响应按键。

附件动作(Attachments 上下文)

动作默认键说明
attachments:nextRight下一个附件
attachments:previousLeft上一个附件
attachments:removeBackspace、Delete移除选中的附件
attachments:exitDown、Escape退出附件导航

页脚动作(Footer 上下文)

动作默认键说明
footer:nextRight下一个页脚项
footer:previousLeft上一个页脚项
footer:upUp在页脚里向上导航(到顶部时取消选择)
footer:downDown在页脚里向下导航
footer:openSelectedEnter打开选中的页脚项
footer:clearSelectionEscape清除页脚选择
footer:dismiss(未绑定)给它绑键没有效果,名为它的 keybindings.json 仍然有效;v2.1.281 之前,Backspace 和 Delete 绑定到它,用来从页脚里移除选中的 artifact 链接

选中某个页脚项(如提示下方智能体面板里的一行)时,即使你把 Chat 上下文里的 Enter 重绑定为 chat:queueSubmit 或 chat:newline,Enter 也会打开它。Chat 里绑定在 Footer 上下文没有绑定的键上的绑定(如 Shift+Tab 的 chat:cycleMode),在选中某项时仍然有效。

消息选择器动作(MessageSelector 上下文)

在回退菜单的消息列表里,你用 Select 动作及其默认键在消息间移动并选择一条,你对这些动作的 Select 绑定在这里也适用。MessageSelector 上下文自己没有动作或默认绑定,用它来只改变这个列表的某个键,方法是在 MessageSelector 块里绑定一个 Select 动作,如 select:accept。下面的例子把 o 绑定为在回退菜单里选择高亮的消息,而不改变任何其他列表:

{
  "bindings": [
    {
      "context": "MessageSelector",
      "bindings": {
        "o": "select:accept"
      }
    }
  ]
}

v2.1.283 之前,这个列表忽略 Select 绑定,并有自己的动作:messageSelector:up、down、top、bottom 和 select。如果你的 keybindings.json 绑定了这些名字之一,该绑定在此列表里作为做同样事情的 Select 动作继续生效。Home 和 End 跳到列表两端(v2.1.283 之前,Shift+K 和 Shift+J 这样的键默认做这件事)。

diff 动作(DiffDialog 上下文)

动作默认键说明
diff:dismissEscape关闭 diff 查看器;在详情视图里则返回文件列表
diff:previousSourceLeft上一个 diff 来源
diff:nextSourceRight下一个 diff 来源
diff:previousFileUp、K文件列表里的上一个文件;详情视图里向上滚动一行
diff:nextFileDown、J文件列表里的下一个文件;详情视图里向下滚动一行
diff:back(未绑定)在 diff 查看器里返回;Escape 通过 diff:dismiss 执行返回动作;详情视图里原先默认的 Left 在 v2.1.203 被移除

文件列表也响应 Select 动作,通过它们的默认键和你的 Select 绑定:select:previous 和 select:next 移到上一个和下一个文件,Enter 通过 select:accept 打开选中文件的 diff。要只为文件列表改变其中某个键,在 DiffDialog 块里绑定该 Select 动作。v2.1.283 之前,文件列表忽略 Select 绑定,Enter 通过单独的 diff:viewDetails 动作打开选中文件的 diff;如果你的 keybindings.json 绑定了 diff:viewDetails,该绑定在文件列表里作为 select:accept 继续生效。

diff 详情视图还把类似分页器的键绑定到标准的滚动动作。这些绑定属于 DiffDialog 上下文,只适用于详情视图;Scroll 上下文的默认值不变:

动作默认键说明
scroll:pageUpPageUp向上滚动半个视口
scroll:pageDownPageDown向下滚动半个视口
scroll:fullPageUpShift+Space、B向上滚动整个视口
scroll:fullPageDownSpace向下滚动整个视口
scroll:topG、Home跳到顶部
scroll:bottomShift+G、End跳到底部

diff 面板动作

/diff 在全屏渲染里打开的 diff 面板的动作。app:cycleDiffBase 在面板打开期间生效的 DiffPanel 上下文里,其余在 Global 里。面板需要 Claude Code v2.1.260 或更高。

动作默认键说明
app:toggleReplTab(未绑定)打开或关闭 diff 面板,与运行 /diff 相同
app:cycleDiffBaseCtrl+X B循环面板的比较基准:本会话、未提交、再到分支
app:diffFileListUpCtrl+Up、Meta+Up面板文件列表溢出时向上滚动
app:diffFileListDownCtrl+Down、Meta+Down面板文件列表溢出时向下滚动
app:toggleDiffNoiseFilter(未绑定)在面板里显示或隐藏测试和生成的文件
app:toggleDiffPreSession(未绑定)展开或折叠本会话之前的改动

模型选择器动作(ModelPicker 上下文)

动作默认键说明
modelPicker:decreaseEffortLeft降低 effort 级别
modelPicker:increaseEffortRight提高 effort 级别
modelPicker:thisSessionOnlys只对本会话应用高亮的模型

effort 滑块动作(EffortSlider 上下文)

不带参数运行 /effort 时打开的滑块。滑块的 Enter 和 Escape 键不能重绑定。

动作默认键说明
effortSlider:decreaseEffortLeft把滑块移到下一个更低的 effort 级别(需要 v2.1.284 或更高)
effortSlider:increaseEffortRight把滑块移到下一个更高的 effort 级别(需要 v2.1.284 或更高)
effortSlider:toggleUltracodeTab滑块提供该选项时,为本会话开启或关闭 ultracode(需要 v2.1.284 或更高)
effortSlider:thisSessionOnlys只对本会话应用聚焦的 effort 级别(需要 v2.1.257 或更高)

Select 动作(Select 上下文)

动作默认键说明
select:nextDown、J、Ctrl+N下一个选项
select:previousUp、K、Ctrl+P上一个选项
select:pageUpPageUp向上移动一页选项
select:pageDownPageDown向下移动一页选项
select:firstHome第一个选项
select:lastEnd最后一个选项
select:acceptEnter接受选择
select:cancelEscape取消选择

在 /skills、/mcp 和 /tasks 这样的列表面板里,Claude Code 应用你的 select:pageUp、pageDown、first 和 last 绑定;在大多数其他列表(如 /model 选择器)里,你的 select:first 和 select:last 绑定生效,PageUp 和 PageDown 不论你的绑定如何都按页翻动选项。v2.1.280 之前,那些其他列表忽略 Home、End 以及你的 select:first 和 select:last 绑定;v2.1.283 之前,/mcp 工具列表不论你的绑定如何都用固定的 PageUp 和 PageDown 翻页。

插件动作(Plugin 上下文)

动作默认键说明
plugin:toggleSpace切换插件选择
plugin:installI安装选中的插件
plugin:favoriteF收藏选中的插件,使它排在已安装标签页的靠前位置

设置动作(Settings 上下文)

select:accept 和 confirm:no 动作复用自 Select 和 Confirmation 上下文,带有设置特定的行为:每个设置在你改动时立即应用,所以 Escape 关闭面板并保存你的改动,而不是拒绝。

动作默认键说明
settings:search/进入搜索模式
settings:retryR出错时重试加载用量数据
select:acceptEnter、Space更改选中的设置或打开它的子菜单
confirm:noEscape关闭面板,改动已保存

智能体动作(Agents 上下文)

适用于用 claude agents 打开的智能体视图(需要 v2.1.257 或更高)。

动作默认键说明
agents:switchViewCtrl+S在按状态和按目录之间切换会话分组
agents:togglePinCtrl+T固定或取消固定选中的会话

智能体视图打开期间,对 Agents 上下文绑定的任何键,Claude Code 使用 Agents 绑定,并忽略同一个键上的 Chat 或 Global 绑定:例如在智能体视图里按 Ctrl+S 会切换会话分组,而不是触发默认的 chat:stash。dispatch 输入的外部编辑器快捷键不是 Agents 动作:智能体视图遵循 Chat 上下文的 chat:externalEditor 绑定,默认是 Ctrl+G。智能体视图里绑定在单个按键上触发,所以绑定到 chat:externalEditor 的 Ctrl+X Ctrl+E 和弦在那里不会打开编辑器。

语音动作

启用语音听写时在 Chat 上下文里可用:

动作默认键说明
voice:pushToTalkSpace听写一个提示;按住还是点按取决于 /voice 模式

滚动动作(Scroll 上下文)

启用全屏渲染时可用:

动作默认键说明
scroll:lineUpwheelup向上滚动一行;鼠标滚轮滚动触发此动作
scroll:lineDownwheeldown向下滚动一行;鼠标滚轮滚动触发此动作
scroll:pageUpPageUp向上滚动半个视口高度
scroll:pageDownPageDown向下滚动半个视口高度
scroll:topCtrl+Home跳到对话开头
scroll:bottomCtrl+End跳到最新消息并重新启用自动跟随
scroll:halfPageUp(未绑定)向上滚动半个视口高度,行为与 scroll:pageUp 相同,为 vi 风格的重绑定提供
scroll:halfPageDown(未绑定)向下滚动半个视口高度,行为与 scroll:pageDown 相同
scroll:fullPageUp(未绑定)向上滚动整个视口高度
scroll:fullPageDown(未绑定)向下滚动整个视口高度
selection:copyCtrl+Shift+C / Cmd+C把选中的文本复制到剪贴板
selection:clear(未绑定)清除当前文本选择(需要 v2.1.234 或更高)
selection:extendLeftShift+Left把当前选择向左扩展一列
selection:extendRightShift+Right把当前选择向右扩展一列
selection:extendUpShift+Up把当前选择向上扩展一行;选择到达顶部边缘时滚动视口
selection:extendDownShift+Down把当前选择向下扩展一行;选择到达底部边缘时滚动视口
selection:extendLineStartShift+Home把当前选择扩展到行首
selection:extendLineEndShift+End把当前选择扩展到行尾

按键语法

修饰键

用 + 分隔符使用修饰键:

  • ctrl 或 control:Control 键
  • shift:Shift 键
  • alt、opt、option 或 meta:Windows 和 Linux 上是 Alt 键,macOS 上是 Option 键
  • cmd、command、super 或 win:macOS 上是 Command 键,Windows 上是 Windows 键,Linux 上是 Super 键

cmd 这一组只在报告 Super 修饰键的终端里才被检测到,如支持 Kitty 键盘协议或 xterm 的 modifyOtherKeys 模式的终端。大多数终端不发送它,所以想让绑定在任何地方都能用,就用 ctrl 或 meta。例如:

ctrl+k          Ctrl + K
shift+tab       Shift + Tab
meta+p          macOS 上是 Option + P,其他地方是 Alt + P
ctrl+shift+c    多个修饰键

大写字母

Claude Code 解析按键名时不区分大小写,所以 K 与 k 是同一个绑定,ctrl+K 与 ctrl+k 相同。要绑定 Shift 加字母,写 shift+k。

非美式键盘布局

即使你当前的键盘布局输入的是其他字符,也要把 Ctrl 快捷键的键名写成拉丁字符。Claude Code 如何把你按的键与绑定匹配,取决于布局的种类:

  • 在俄语等非拉丁布局下,当终端使用 Kitty 键盘协议并报告键的位置时,Claude Code 按键的美式布局位置匹配 Ctrl 快捷键:在这样的终端里,激活俄语布局时按 Ctrl 加物理 W 键会触发 ctrl+w。在不报告位置的终端里,Claude Code 匹配终端为该按键发送的内容:ASCII 控制码触发拉丁快捷键,而以西里尔字符到达的按键不匹配任何绑定。
  • 在重排拉丁字母的布局(如 AZERTY)下,Claude Code 匹配该键输入的字母,所以按 Ctrl 加标着 A 的键会触发 ctrl+a。

和弦

和弦是用空格分隔的按键序列:

ctrl+k ctrl+s   按 Ctrl+K,松开,再按 Ctrl+S

每个按键要在前一个按键之后 3 秒内按下;等得更久,Claude Code 会取消该和弦并显示简短通知。

特殊键

  • escape 或 esc:Escape 键
  • enter 或 return:Enter 键
  • tab:Tab 键
  • space:空格键
  • up、down、left、right:方向键
  • pageup、pagedown:Page Up 和 Page Down 键
  • home、end:Home 和 End 键
  • backspace、delete:删除键
  • wheelup、wheeldown:鼠标滚轮滚动事件

解绑默认快捷键

把动作设为 null 来解绑默认快捷键:

{
  "bindings": [
    {
      "context": "Chat",
      "bindings": {
        "ctrl+s": null
      }
    }
  ]
}

这对和弦绑定同样有效。解绑共用同一前缀的每个和弦,会释放该前缀,使其可作为单键绑定使用;任何活动上下文里的和弦都会保留它的前缀,所以你必须在定义它的上下文里逐个解绑。

Claude Code 在 ctrl+x 前缀上绑定了这些默认和弦:Chat 里的 ctrl+x ctrl+k、ctrl+x ctrl+e、ctrl+x enter、ctrl+x ctrl+a、ctrl+x ctrl+s 和 ctrl+x tab,Task 里的 ctrl+x ctrl+b,以及 DiffPanel 里的 ctrl+x b。ctrl+x enter 和弦需要 v2.1.247 或更高,ctrl+x b、ctrl+x ctrl+a 和 ctrl+x tab 需要 v2.1.260 或更高,ctrl+x ctrl+s 需要 v2.1.275 或更高。要把 ctrl+x 本身收回作为单键绑定,把它们全部解绑:

{
  "bindings": [
    {
      "context": "Task",
      "bindings": {
        "ctrl+x ctrl+b": null
      }
    },
    {
      "context": "DiffPanel",
      "bindings": {
        "ctrl+x b": null
      }
    },
    {
      "context": "Chat",
      "bindings": {
        "ctrl+x ctrl+k": null,
        "ctrl+x ctrl+e": null,
        "ctrl+x enter": null,
        "ctrl+x ctrl+a": null,
        "ctrl+x ctrl+s": null,
        "ctrl+x tab": null,
        "ctrl+x": "chat:newline"
      }
    }
  ]
}

如果你解绑了某个前缀上的一部分而非全部和弦,按下该前缀仍会为剩余的绑定进入和弦等待模式。

保留的快捷键

这些快捷键不能重绑定:

快捷键原因
Ctrl+C硬编码的中断/取消
Ctrl+D硬编码的退出
Ctrl+MClaude Code 总是把它当作 Enter 接收
Ctrl+[Claude Code 总是把它当作 Escape 接收;在使用 Kitty 键盘协议的终端里,这需要 v2.1.242 或更高
Ctrl+IClaude Code 总是把它当作 Tab 接收
Ctrl+H发送 ASCII 退格字节;Claude Code 在 Windows 上如何读取它取决于你的终端和 CLAUDE_CODE_BS_AS_CTRL_BACKSPACE 环境变量
Caps Lock不会送达终端应用

终端冲突

有些快捷键可能与终端复用器冲突:

快捷键冲突
Ctrl+Btmux 前缀(按两次发送)
Ctrl+AGNU screen 前缀
Ctrl+ZUnix 进程挂起(SIGTSTP)

文本字段

如果你绑定了单个字母、数字或 Space,仍然可以在对话框或面板内的文本字段里输入该字符;一个这样的字段是对 Claude 所提问题的 Other 回答。字段有焦点期间,你不带 Ctrl、Alt 或 Cmd 按下的可打印键会进入字段,Claude Code 不会拿它去匹配你的绑定。

字段有焦点期间,这些键仍会运行它们的绑定:不输入字符的键(如 Enter、Escape、Tab 和方向键);任何带 Ctrl、Alt 或 Cmd 按下的键;以及已在进行中的和弦的第二个按键。在主提示处,Claude Code 把每个键与活动上下文(如 Chat)匹配,只有没有绑定接管它时才输入该键。

与 vim 模式的交互

通过 /config → Editor mode 启用 vim 模式后,键绑定和 vim 模式独立运作:

  • Vim 模式在文本输入层面处理输入(光标移动、模式、动作)。
  • 键绑定在组件层面处理动作(切换待办、提交等)。
  • vim 模式里的 Escape 键把 INSERT 切换到 NORMAL 模式,它不会触发 chat:cancel。
  • 大多数 Ctrl+键快捷键会穿过 vim 模式到达键绑定系统。
  • vim 键不能通过键位文件重映射;要把 jj 这样的两键 INSERT 模式序列映射为 Escape,用 vimInsertModeRemaps 设置。
  • 在 vim NORMAL 模式下,? 显示帮助菜单(vim 行为)。
  • 在 vim NORMAL 模式下,/ 打开历史搜索,与标准模式里的 Ctrl+R 相同。

校验

Claude Code 校验你的键绑定,并对以下情况向调试日志写警告:

  • 解析错误(无效的 JSON 或结构)
  • 拼错的修饰键,如 ctl+k:Claude Code 丢弃它不认识的部分,并把绑定应用到剩下的按键(这个例子里是 k)
  • 无效的上下文名称
  • 无效的动作值,例如既不是字符串也不是 null 的动作
  • 未知的动作名称,例如拼错的已注册动作:Claude Code 跳过该绑定,并保留该键上任何默认绑定的效力
  • 保留快捷键冲突
  • 同一上下文里的重复绑定

用 --debug 启动 Claude Code 查看详情。