VS Code 快捷键通过编辑 keybindings.json 实现,需用命令面板打开该文件;每条规则含 key、command 字段,when 为可选上下文条件;覆盖默认键须匹配其 when;跨平台需用 "mac": true 分支。

VS Code 的键盘快捷键映射不是靠“教程式点击”完成的,而是通过直接编辑 keybindings.json 文件实现的——图形界面(命令面板 → “Preferences: Open Keyboard Shortcuts (JSON)”)只是它的快捷入口,底层逻辑始终是 JSON 规则匹配。
如何打开并编辑 keybindings.json
最稳妥的方式是用命令面板触发:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)打开命令面板 - 输入并选择
Preferences: Open Keyboard Shortcuts (JSON) - VS Code 会打开一个可编辑的
keybindings.json文件(路径通常为:~/.config/Code/User/keybindings.json或%APPDATA%\Code\User\keybindings.json)
别手动找文件再用外部编辑器打开——VS Code 会监听该文件变化,但非它启动的编辑可能引发同步冲突或忽略生效逻辑。
添加自定义快捷键的基本结构
每条快捷键是一个对象,必须包含 key、command 两个字段,when 是可选但高频使用的上下文条件:
[
{
"key": "ctrl+alt+f",
"command": "editor.action.formatDocument",
"when": "editorTextFocus && !editorReadonly"
}
]
注意:
-
key中的修饰键顺序固定:ctrl、shift、alt、cmd(macOS),写成alt+ctrl+f不生效 -
command必须是 VS Code 内置命令 ID(可在命令面板里搜索命令名,右键 → “Copy Command ID” 获取) -
when表达式决定快捷键是否启用,比如editorTextFocus表示光标在编辑器内,terminalFocus表示焦点在终端——漏写可能导致快捷键在不该触发时静默失败
覆盖默认快捷键的常见陷阱
VS Code 默认快捷键优先级高于用户自定义项,想覆盖必须确保新规则完全匹配原规则的 when 条件,否则旧键仍生效,新键被忽略:
- 例如想把保存快捷键从
Ctrl+S改成Ctrl+Alt+S,只需新增一条;但若想把Ctrl+S改绑定到其他命令(如“保存不格式化”),就必须显式写出和原默认项一致的when,比如:"when": "editorTextFocus && !editorReadonly && !inDebugRepl" - 用
Ctrl+K Ctrl+S打开快捷键 UI,搜索目标命令,点右侧“▶”图标可查看所有绑定(含默认和用户项),带“✓”的是当前生效项,方便比对 - 多个相同
key+ 相同when的规则中,后定义的会覆盖前定义的——但建议避免重复定义,直接删掉旧条目更清晰
跨平台快捷键要单独处理
macOS 的 cmd 和 Windows/Linux 的 ctrl 不能自动映射。如果你共享配置,需用平台条件分支:
[
{
"key": "ctrl+alt+o",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminalFocus"
},
{
"key": "cmd+alt+o",
"command": "workbench.action.terminal.toggleTerminal",
"when": "terminalFocus",
"mac": true
}
]
注意:mac 字段是布尔值,不是字符串;且只有 macOS 会读取带 "mac": true 的条目,其他平台自动跳过——这个机制比写两套配置更轻量,也避免误触发。
真正容易出问题的,是 when 条件拼写错误、修饰键顺序错乱、以及没意识到默认快捷键自带复杂上下文约束——这些不会报错,只会让你反复按却没反应。










