快捷键改完没反应,先查when条件不满足、插件劫持、系统或输入法拦截三处;必须编辑keybindings.json而非gui,用“-命令id”禁用默认键,命令id须右键复制,非美式键盘需设"keyboard.dispatch":"keycode"。

快捷键改完没反应?先查这三处
不是配置写错了,90% 的“失灵”都卡在这三个环节:when 条件不满足、插件劫持、系统或输入法拦截。VSCode 不报错也不提示,直接静默忽略,所以你按了等于没按。
-
when字段漏写或写错:比如绑了"editor.action.formatDocument"却没加"when": "editorTextFocus",那你在终端或资源管理器里按,它就完全没反应 - 插件抢键:GitLens、Vim 扩展、IntelliJ Keybindings 这类扩展自带大量绑定,且优先级高于用户配置;最准的排查方式是打开
Ctrl+K Ctrl+S,搜你的组合键,看“来源”列是Extension还是User - 系统级吞键:搜狗拼音、Logitech Options、Raycast 常偷偷截掉
Ctrl+Shift+P或Ctrl+;;临时退出它们再试一次,比重配十次更有效
必须编辑 keybindings.json,GUI 只能应付简单场景
图形界面(Ctrl+K Ctrl+S)适合改一两个高频命令,比如把保存改成 Ctrl+S,但它不支持 when 条件、不支持和弦键(如 Ctrl+K Ctrl+C)、改完容易被插件升级覆盖。真正稳定、可同步、带上下文控制的配置,必须进 keybindings.json。
- 正确打开方式:按
Ctrl+Shift+P→ 输入Preferences: Open Keyboard Shortcuts (JSON)→ 回车;别用“Open Settings (JSON)”,那是改settings.json的 - 文件路径固定:
%APPDATA%\Code\User\keybindings.json(Win)、~/Library/Application Support/Code/User/keybindings.json(macOS)、~/.config/Code/User/keybindings.json(Linux) - 格式必须是 JSON 数组:
[]不能删,所有自定义项作为对象塞进方括号里,逗号不能少,引号必须是英文双引号
怎么安全禁用默认快捷键?别删,用负号前缀
想释放 Ctrl+K Ctrl+I 给新命令用?别删默认项,也别留空 "command": ""——VSCode 会直接忽略整条规则。正确做法是用 - 前缀明确“取消绑定”。
- 写法必须严格:
{"key":"ctrl+k ctrl+i","command":"-editor.action.showHover"};-必须紧挨着命令名,不能有空格,也不能写成"- editor.action.showHover" - 命令 ID 怎么来?在 GUI 里右键某条快捷键 → “复制命令 ID”,别凭印象写
showHover或hover这种不全的 - 禁用后,这条键位就彻底空出来,你可以放心绑定新命令,不会和原逻辑冲突
非美式键盘用户必调的隐藏设置
中文、德语、日语等键盘布局下,Ctrl+; 常被识别成 Ctrl+:,导致自定义失效。这不是 VSCode bug,而是默认按字符 dispatch 导致的映射错乱。
- 解决方法:打开
settings.json(不是keybindings.json),加一行:"keyboard.dispatch":"keyCode" - 这个设置让 VSCode 按物理按键位(比如键盘上第 18 号键)而不是字符来识别,彻底绕过输入法干扰
- 加完重启 VSCode 或执行
Developer: Reload Window生效
真正难的不是写几行 JSON,而是搞清「谁在监听这个键」「当前上下文是否匹配」「哪个进程最先截走了它」。调试快捷键,本质是调试整个输入链路,不是只盯着自己写的那一行。











