必须通过命令面板执行“preferences: open keyboard shortcuts (json)”打开用户级keybindings.json文件,路径因系统而异,该文件默认为空数组[],所有自定义绑定须以合法json对象格式添加其中,保存后立即生效。

怎么打开真正生效的 keybindings.json 文件
别用“Open Settings (JSON)”——那是改 settings.json 的,和快捷键完全无关。必须走命令面板:Ctrl+Shift+P(macOS 是 Cmd+Shift+P)→ 输入并执行 Preferences: Open Keyboard Shortcuts (JSON)。VSCode 会自动打开用户级配置文件,路径通常是:
- Windows:
%APPDATA%\Code\User\keybindings.json - macOS:
~/Library/Application Support/Code/User/keybindings.json - Linux:
~/.config/Code/User/keybindings.json
这个文件默认是空数组 [],所有自定义项都得塞进方括号里。手动去文件系统找、复制粘贴路径,容易选错位置或权限异常;误开成其他 JSON 文件,改半天也不会生效。
禁用插件快捷键的正确写法(不是 null,也不是空字符串)
想让 GitLens 不再抢 Ctrl+Shift+B,但又不想卸载它?不能写 "command": "" 或 "command": null——VSCode 会直接忽略整条规则。必须用负号前缀明确取消绑定:
[{"key":"ctrl+shift+b","command":"-gitlens.showQuickFileHistory"}]
关键点:
-
command必须写全命令 ID,右键快捷键列表 → “复制命令 ID” 最稳妥 -
-必须紧挨着命令名,不能有空格,比如"- gitlens.showQuickFileHistory"无效 - 这条只是释放组合键,
Ctrl+Shift+B不会报错,但也不会触发任何操作——你得自己补一条新绑定,否则等于废掉
when 条件写错,VSCode 从不提醒,但快捷键一定失效
when 是布尔表达式,拼错一个字母就静默失效,比如把 editorTextFocus 写成 editorTextFocu,VSCode 不报错、不警告、也不高亮,整条规则直接被跳过。
常见有效条件:
-
editorTextFocus:光标在可编辑文本区域时生效 -
explorerViewletVisible:资源管理器可见时 -
editorLangId == 'python':仅在 Python 文件中 -
!terminalFocus:终端未聚焦时
验证是否生效最简单的方法:按快捷键后打开开发者工具(Ctrl+Shift+I),切到 Console 标签,输入 monaco.keymaps.KeybindingsRegistry.getBoundKeybindings('your.command.id') 查看当前匹配的所有规则及其 when 表达式求值结果。
为什么改完 keybindings.json 没反应?优先排查这三处
保存后没生效,大概率不是配置写错了,而是以下任一环节卡住:
-
when条件不满足:比如写了"when": "editorTextFocus",但你在终端或搜索框里按,它就完全沉默 - 被扩展动态劫持:GitLens、Remote - SSH 等会在连接后或文件打开时动态注册绑定,且优先级高于用户配置;回到
Ctrl+K Ctrl+S搜索该组合键,找到来源为 “Extension” 的条目,点垃圾桶图标移除 - 系统或输入法拦截:搜狗拼音、Logitech Options、Raycast 常吞掉
Ctrl+Shift+P或Ctrl+;;临时退出它们再试一次,比重配十次更有效
非美式键盘用户还要额外加一条设置:"keyboard.dispatch":"keyCode" 到 settings.json,否则 Ctrl+; 可能被识别成 Ctrl+:,导致自定义失效。











