vscode自定义快捷键需关注优先级、作用域和系统拦截;查占用用ctrl+k ctrl+s,禁用用“-”前缀,非美键盘需设"keyboard.dispatch":"keycode"。

VSCode 自定义快捷键不是“加一条就生效”,而是受优先级、作用域和系统拦截三重影响;直接往 keybindings.json 里硬塞规则,大概率导致功能失效或行为错乱。
怎么查当前谁占用了 Ctrl+Shift+P 这类关键快捷键
别猜,直接看。按下 Ctrl+K Ctrl+S(macOS 是 Cmd+K Cmd+S),在搜索框输入 ctrl+shift+p。列表会立刻显示所有绑定到该组合的命令,每条末尾都标着来源:是 Default、某个扩展(比如 GitLens),还是你自己的 user 配置。
- 如果出现多条,说明冲突已发生;黄色警告图标会出现在最上面那条旁边
- 点击某条右侧的铅笔图标,可快速修改或删除它
- 右键某条 → “复制命令 ID”,后续在
keybindings.json中禁用时要用到
为什么改了 keybindings.json 却没反应
常见原因不是语法错,而是三条隐性规则被忽略:
-
keybindings.json里写的规则必须是合法 JSON 数组格式,哪怕只加一条,也得包在[ ]里,不能漏掉逗号或引号 - 自定义规则只有在
when条件满足时才触发;比如写了"when": "editorTextFocus",但你在资源管理器里按快捷键,它就完全不响应 - 系统级程序或输入法可能根本没把按键传给 VSCode——搜狗拼音、Logitech Options、Raycast 都干过这事;临时退出它们再试一次,比改十次配置更有效
如何安全禁用某个插件的快捷键而不卸载它
不想删插件,又受不了它抢走 Ctrl+D?用负号语法最干净:
[<br> { "key": "ctrl+d", "command": "-editor.action.addSelectionToNextFindMatch" }<br>]
这个 - 前缀表示“禁用该命令的默认绑定”,VSCode 会原地释放这个组合键,不报错也不冲突。
- 命令 ID 可从图形界面右键复制,或在命令面板执行
Developer: Toggle Developer Tools查控制台输出 - 不要写
"command": ""或留空字符串,VSCode 会忽略整条规则 - 禁用后,该快捷键不会变灰,只是不再触发——得靠自己补上新绑定,否则等于废掉了
keyboard.dispatch 设置不当会导致物理键映射错乱
在非美式键盘(如中文、德语、日语)上,Ctrl+; 可能被识别成 Ctrl+:,导致自定义失效。这是 VSCode 默认按字符 dispatch 导致的。
- 打开设置(
Ctrl+,),搜索keyboard.dispatch - 改成
"keyboard.dispatch": "keyCode",让 VSCode 按物理按键位置而非输入字符判断 - 这个设置必须写在用户设置(settings.json)里,不能放在
keybindings.json中 - 改完不用重启,但需重新加载窗口(
Developer: Reload Window)才能生效
真正卡住人的往往不是怎么加快捷键,而是改完之后发现 Ctrl+S 不保存了、F5 不调试了——这时候先清空 keybindings.json 成为空数组 [],确认是否回归默认行为,再逐条加回,比对着一堆条件猜强得多。











