Appearance
Claude Code 允许通过 ~/.claude/keybindings.json 完全自定义键盘快捷键。运行 /keybindings 即可打开配置文件,修改后无需重启立即生效。配置以 bindings 数组为核心,按上下文(chat/editor 等)分组,每条绑定指定 key 和 action,也可将 key 设为 null 来解除默认绑定。本文包含所有可用 action 清单、Vim 模式兼容说明,以及典型自定义示例。
自定义键盘快捷键
运行 /keybindings 创建或打开配置文件 ~/.claude/keybindings.json,对 Claude Code 的快捷键进行完全自定义。修改后无需重启即时生效。
配置文件格式
配置文件包含一个 bindings 数组,每个元素指定一个上下文和该上下文下的按键映射:
| 字段 | 说明 |
|---|---|
$schema | 可选的 JSON Schema URL,供编辑器自动补全 |
$docs | 可选的文档 URL |
bindings | 按上下文分组的绑定数组 |
这个示例将 Ctrl+E 绑定为在 Chat 中打开外部编辑器,同时解绑 Ctrl+U:
json
{
"$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+u": null
}
}
]
}值为 null 表示解绑该快捷键。
所有上下文
| 上下文 | 说明 |
|---|---|
Global | 应用全局生效 |
Chat | 主聊天输入区 |
Autocomplete | 自动补全菜单打开时 |
Settings | 设置菜单 |
Confirmation | 权限/确认对话框 |
Tabs | Tab 导航组件 |
Help | 帮助菜单可见时 |
Transcript | 文本记录查看器 |
HistorySearch | 历史搜索模式(Ctrl+R) |
Task | 后台任务运行时 |
ThemePicker | 主题选择对话框 |
Attachments | 图片/附件栏导航 |
Footer | 底部状态导航(任务、团队、diff) |
MessageSelector | 回退/摘要对话框消息选择 |
DiffDialog | Diff 查看器导航 |
ModelPicker | 模型选择器推理力度调整 |
Select | 通用选择/列表组件 |
Plugin | 插件对话框(浏览、发现、管理) |
Scroll | 全屏模式下的对话滚动和文本选择 |
Doctor | /doctor 诊断界面 |
可用 Action 完整列表
全局 App 操作(Global 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
app:interrupt | Ctrl+C | 取消当前操作 |
app:exit | Ctrl+D | 退出 Claude Code |
app:redraw | 未绑定 | 强制重新渲染终端 |
app:toggleTodos | Ctrl+T | 切换任务列表显示 |
app:toggleTranscript | Ctrl+O | 切换详细记录显示 |
历史记录操作
| Action | 默认键 | 说明 |
|---|---|---|
history:search | Ctrl+R | 打开历史搜索 |
history:previous | ↑ | 上一条历史 |
history:next | ↓ | 下一条历史 |
Chat 操作(Chat 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
chat:cancel | Escape | 取消当前输入 |
chat:clearInput | Ctrl+L | 清空提示输入框 |
chat:killAgents | Ctrl+X Ctrl+K | 终止所有后台代理 |
chat:cycleMode | Shift+Tab* | 循环切换权限模式 |
chat:modelPicker | Cmd+P / Meta+P | 打开模型选择器 |
chat:fastMode | Meta+O | 切换快速模式 |
chat:thinkingToggle | Cmd+T / Meta+T | 切换扩展思考模式 |
chat:submit | Enter | 提交消息 |
chat:newline | Ctrl+J | 插入换行(不提交) |
chat:undo | Ctrl+_,Ctrl+Shift+- | 撤销上一步 |
chat:externalEditor | Ctrl+G,Ctrl+X Ctrl+E | 在外部编辑器中打开 |
chat:stash | Ctrl+S | 暂存当前提示词 |
chat:imagePaste | Ctrl+V(Windows 为 Alt+V) | 粘贴图片 |
*Windows 不带 VT 模式时(Node < 24.2.0 / < 22.17.0,Bun < 1.2.23),默认为 Meta+M。
语音操作(Chat 上下文,启用语音输入时)
| Action | 默认键 | 说明 |
|---|---|---|
voice:pushToTalk | Space(按住) | 按住说话 |
自动补全操作(Autocomplete 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
autocomplete:accept | Tab | 接受建议 |
autocomplete:dismiss | Escape | 关闭菜单 |
autocomplete:previous | ↑ | 上一个建议 |
autocomplete:next | ↓ | 下一个建议 |
确认对话框操作(Confirmation 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
confirm:yes | Y, Enter | 确认 |
confirm:no | N, Escape | 拒绝 |
confirm:previous | ↑ | 上一个选项 |
confirm:next | ↓ | 下一个选项 |
confirm:nextField | Tab | 下一个字段 |
confirm:toggle | Space | 切换选择 |
confirm:cycleMode | Shift+Tab | 循环切换权限模式 |
confirm:toggleExplanation | Ctrl+E | 切换权限详情说明 |
permission:toggleDebug | Ctrl+D | 切换权限调试信息 |
文本记录操作(Transcript 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
transcript:toggleShowAll | Ctrl+E | 切换显示全部内容 |
transcript:exit | q, Ctrl+C, Escape | 退出记录查看 |
历史搜索操作(HistorySearch 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
historySearch:next | Ctrl+R | 下一个匹配 |
historySearch:accept | Escape, Tab | 接受选择 |
historySearch:cancel | Ctrl+C | 取消搜索 |
historySearch:execute | Enter | 执行选中命令 |
任务操作(Task 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
task:background | Ctrl+B | 将当前任务放到后台 |
主题操作(ThemePicker 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
theme:toggleSyntaxHighlighting | Ctrl+T | 切换代码语法高亮 |
帮助操作(Help 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
help:dismiss | Escape | 关闭帮助菜单 |
Tabs 操作(Tabs 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
tabs:next | Tab, → | 下一个标签 |
tabs:previous | Shift+Tab, ← | 上一个标签 |
附件操作(Attachments 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
attachments:next | → | 下一个附件 |
attachments:previous | ← | 上一个附件 |
attachments:remove | Backspace, Delete | 删除选中附件 |
attachments:exit | ↓, Escape | 退出附件导航 |
Footer 操作(Footer 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
footer:next | → | 下一个 footer 项 |
footer:previous | ← | 上一个 footer 项 |
footer:up | ↑ | 向上导航(顶部时取消选择) |
footer:down | ↓ | 向下导航 |
footer:openSelected | Enter | 打开选中项 |
footer:clearSelection | Escape | 清除选择 |
消息选择操作(MessageSelector 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
messageSelector:up | ↑, K, Ctrl+P | 向上移动 |
messageSelector:down | ↓, J, Ctrl+N | 向下移动 |
messageSelector:top | Ctrl+↑, Shift+↑, Meta+↑, Shift+K | 跳到顶部 |
messageSelector:bottom | Ctrl+↓, Shift+↓, Meta+↓, Shift+J | 跳到底部 |
messageSelector:select | Enter | 选择消息 |
Diff 操作(DiffDialog 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
diff:dismiss | Escape | 关闭 Diff 查看器 |
diff:previousSource | ← | 上一个 diff 来源 |
diff:nextSource | → | 下一个 diff 来源 |
diff:previousFile | ↑ | 上一个文件 |
diff:nextFile | ↓ | 下一个文件 |
diff:viewDetails | Enter | 查看 diff 详情 |
模型选择器操作(ModelPicker 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
modelPicker:decreaseEffort | ← | 降低推理深度 |
modelPicker:increaseEffort | → | 提高推理深度 |
选择操作(Select 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
select:next | ↓, J, Ctrl+N | 下一个选项 |
select:previous | ↑, K, Ctrl+P | 上一个选项 |
select:accept | Enter | 接受选择 |
select:cancel | Escape | 取消选择 |
插件操作(Plugin 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
plugin:toggle | Space | 切换插件选择 |
plugin:install | I | 安装选中插件 |
设置操作(Settings 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
settings:search | / | 进入搜索模式 |
settings:retry | R | 重试加载用量数据(出错时) |
settings:close | Enter | 保存并关闭配置面板(Escape 丢弃并关闭) |
Doctor 操作(Doctor 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
doctor:fix | F | 将诊断报告发给 Claude 修复(仅在发现问题时可用) |
按键语法
修饰键
用 + 分隔:
ctrl+k # Control + K
shift+tab # Shift + Tab
meta+p # Command/Meta + P
ctrl+shift+c # 多个修饰键支持的修饰键名称:
ctrl或controlalt、opt或optionshiftmeta、cmd或command
大写字母
单独的大写字母默认等于 Shift + 小写字母,即 K 等同于 shift+k(适合 Vim 风格绑定)。
带修饰键时大写不额外加 Shift:ctrl+K 与 ctrl+k 等效。
和弦(连续按键)
用空格分隔两次按键:
ctrl+k ctrl+s # 先按 Ctrl+K,再按 Ctrl+S特殊键名
escape/esc、enter/return、tab、space、up/down/left/right、backspace、delete
解绑默认快捷键
将值设为 null:
json
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}终端冲突
| 快捷键 | 冲突 |
|---|---|
| Ctrl+B | tmux 前缀键(按两次发送) |
| Ctrl+A | GNU screen 前缀键 |
| Ctrl+Z | Unix 进程暂停(SIGTSTP) |
Vim 模式兼容说明
开启 Vim 模式(/config → Editor mode)后,快捷键和 Vim 模式独立工作:
- Vim 模式:在文本输入层处理(光标移动、模式切换、操作命令)
- Keybindings:在组件层处理(切换任务列表、提交等)
- Vim 模式下 Escape 切换 INSERT → NORMAL 模式,不触发
chat:cancel - 大多数 Ctrl+键 快捷键会透传到 keybinding 系统
配置验证
Claude Code 会验证你的 keybindings 并给出警告:
- JSON 解析错误
- 无效上下文名称
- 终端复用器冲突
- 同一上下文内重复绑定
运行 /doctor 查看所有键绑定警告。
常见问题
Q: 如何自定义 Claude Code 的快捷键?
A: 运行 /keybindings 创建或打开 ~/.claude/keybindings.json 配置文件。在 bindings 数组中指定上下文和按键映射即可,修改后立即生效,无需重启。
Q: 如何解绑不需要的默认快捷键?
A: 将对应绑定的值设为 null,例如:"ctrl+s": null 解绑 Ctrl+S。
Q: Chat 和 Global 上下文有什么区别?
A: Global 上下文的绑定在应用任何位置都生效;Chat 上下文的绑定只在主聊天输入区激活时生效。如果两个上下文绑定了同一个按键,Chat 优先级更高。
json
{
"$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+u": null
}
}
]
}bindings 是一个数组,每个元素指定一个上下文和该上下文下的按键映射。值为 null 表示解绑该快捷键。
所有上下文
| 上下文 | 说明 |
|---|---|
Global | 应用全局生效 |
Chat | 主聊天输入区 |
Autocomplete | 自动补全菜单打开时 |
Settings | 设置菜单 |
Confirmation | 权限/确认对话框 |
Tabs | Tab 导航组件 |
Help | 帮助菜单可见时 |
Transcript | 文本记录查看器 |
HistorySearch | 历史搜索模式(Ctrl+R) |
Task | 后台任务运行时 |
ThemePicker | 主题选择对话框 |
Attachments | 图片/附件栏导航 |
Footer | 底部状态导航 |
MessageSelector | 回退/摘要对话框消息选择 |
DiffDialog | Diff 查看器导航 |
ModelPicker | 模型选择器推理力度调整 |
Select | 通用选择/列表组件 |
Plugin | 插件对话框 |
可用 Action 完整列表
全局 App 操作(Global 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
app:interrupt | Ctrl+C | 取消当前操作 |
app:exit | Ctrl+D | 退出 Claude Code |
app:toggleTodos | Ctrl+T | 切换任务列表显示 |
app:toggleTranscript | Ctrl+O | 切换详细记录显示 |
历史记录操作
| Action | 默认键 | 说明 |
|---|---|---|
history:search | Ctrl+R | 打开历史搜索 |
history:previous | ↑ | 上一条历史 |
history:next | ↓ | 下一条历史 |
Chat 操作(Chat 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
chat:cancel | Escape | 取消当前输入 |
chat:cycleMode | Shift+Tab | 循环切换权限模式 |
chat:modelPicker | Cmd+P / Meta+P | 打开模型选择器 |
chat:thinkingToggle | Cmd+T / Meta+T | 切换扩展思考模式 |
chat:submit | Enter | 提交消息 |
chat:undo | Ctrl+_ | 撤销上一步 |
chat:externalEditor | Ctrl+G | 在外部编辑器中打开 |
chat:stash | Ctrl+S | 暂存当前提示词 |
chat:imagePaste | Ctrl+V(Windows 为 Alt+V) | 粘贴图片 |
Windows 不带 VT 模式时(Node < 24.2.0 / < 22.17.0,Bun < 1.2.23),
chat:cycleMode默认为 Meta+M。
语音操作(Chat 上下文,启用语音输入时)
| Action | 默认键 | 说明 |
|---|---|---|
voice:pushToTalk | Space(按住) | 按住说话 |
自动补全操作(Autocomplete 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
autocomplete:accept | Tab | 接受建议 |
autocomplete:dismiss | Escape | 关闭菜单 |
autocomplete:previous | ↑ | 上一个建议 |
autocomplete:next | ↓ | 下一个建议 |
确认对话框操作(Confirmation 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
confirm:yes | Y, Enter | 确认 |
confirm:no | N, Escape | 拒绝 |
confirm:cycleMode | Shift+Tab | 循环切换权限模式 |
confirm:toggleExplanation | Ctrl+E | 切换权限详情说明 |
permission:toggleDebug | Ctrl+D | 切换权限调试信息 |
任务操作(Task 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
task:background | Ctrl+B | 将当前任务放到后台 |
Diff 操作(DiffDialog 上下文)
| Action | 默认键 | 说明 |
|---|---|---|
diff:dismiss | Escape | 关闭 Diff 查看器 |
diff:previousSource | ← | 上一个 diff 来源 |
diff:nextSource | → | 下一个 diff 来源 |
diff:previousFile | ↑ | 上一个文件 |
diff:nextFile | ↓ | 下一个文件 |
按键语法
修饰键
用 + 分隔:
ctrl+k # Control + K
shift+tab # Shift + Tab
meta+p # Command/Meta + P
ctrl+shift+c # 多个修饰键支持的修饰键名称:
ctrl或controlalt、opt或optionshiftmeta、cmd或command
大写字母
单独的大写字母默认等于 Shift + 小写字母,即 K 等同于 shift+k(适合 Vim 风格绑定)。
带修饰键时大写不额外加 Shift:ctrl+K 与 ctrl+k 等效。
和弦(连续按键)
用空格分隔两次按键:
ctrl+k ctrl+s # 先按 Ctrl+K,再按 Ctrl+S特殊键名
escape/esc、enter/return、tab、space、up/down/left/right、backspace、delete
解绑默认快捷键
将值设为 null:
json
{
"bindings": [
{
"context": "Chat",
"bindings": {
"ctrl+s": null
}
}
]
}保留快捷键(不可修改)
| 快捷键 | 原因 |
|---|---|
| Ctrl+C | 硬编码的中断/取消 |
| Ctrl+D | 硬编码的退出 |
终端冲突
| 快捷键 | 冲突 |
|---|---|
| Ctrl+B | tmux 前缀键(按两次发送) |
| Ctrl+A | GNU screen 前缀键 |
| Ctrl+Z | Unix 进程暂停(SIGTSTP) |
Vim 模式兼容说明
开启 Vim 模式(/vim)后,快捷键和 Vim 模式独立工作:
- Vim 模式:在文本输入层处理(光标移动、模式切换、操作命令)
- Keybindings:在组件层处理(切换任务列表、提交等)
- Vim 模式下 Escape 切换 INSERT → NORMAL 模式,不触发
chat:cancel - 大多数 Ctrl+键 快捷键会透传到 keybinding 系统
配置验证
Claude Code 会验证你的 keybindings 并给出警告:
- JSON 解析错误
- 无效上下文名称
- 保留快捷键冲突
- 终端复用器冲突
- 同一上下文内重复绑定
运行 /doctor 查看所有键绑定警告。