vscode插件命令id必须准确匹配,可通过ctrl+k ctrl+s搜索后悬停查看或右键复制;中文输入法、非美式键盘布局及第三方工具可能拦截快捷键;when条件需严格遵循语法,禁用默认绑定用“-”前缀。

VSCode 插件命令的快捷键不能靠猜,也不能只看菜单文字——prettier.format 和 python.formatDocument 这类 command ID 必须准确匹配,否则按了没反应。
怎么查插件的真实 command ID
插件注册的命令名往往和界面显示不一致,比如“格式化文档”在 Prettier 插件里对应的是 prettier.format,而不是 editor.action.formatDocument。
- 打开快捷键界面:
Ctrl+K Ctrl+S(macOS 是Cmd+K Cmd+S) - 在搜索框输入功能关键词,例如
format python、run test或插件名如prettier - 找到目标条目后,鼠标悬停在左侧图标上,浮层会显示完整
command字符串 - 右键可直接选择“复制命令 ID”,避免手误拼错
- 如果没搜到,说明插件未激活或当前文件类型不匹配语言 ID(比如打开
.txt文件时,python.formatDocument不会出现)
中文环境下快捷键失效的三个隐藏原因
不是配置写错了,而是中文输入法、键盘布局或系统拦截把按键“吃掉”了。
- 搜狗、微软拼音等中文输入法常劫持
Ctrl+Shift组合键(如切换中英文),导致 VSCode 根本收不到信号;临时切换为英文输入法再试 - 非美式键盘(如中文键盘)默认用字符 dispatch,
Ctrl+;可能被识别成Ctrl+:;必须在settings.json中设"keyboard.dispatch": "keyCode" - 第三方工具如 Raycast、Logitech Options、Mac 的 Karabiner-Elements 也会全局拦截热键;关闭它们再验证
when 条件写错等于没写
很多自定义快捷键静默失效,问题全出在 when 表达式上——它不是可选项,而是开关。
-
"when": "editorTextFocus":只在编辑器文本区生效,终端、设置页、侧边栏聚焦时完全不触发 -
"when": "editorLangId == 'typescript':注意是小写、无扩展名前缀;.ts文件对应typescript,不是ts或TypeScript - 多条件用括号包裹再连接:
"when": "(editorLangId == 'javascript' || editorLangId == 'typescript') && editorTextFocus",漏括号会导致逻辑错乱 - 插件自带上下文变量可用,比如 Python 插件提供
pythonInterpretersAvailable,但需查其package.json的contributes.keybindings段确认支持
安全禁用插件默认快捷键的方法
不想卸载插件,又受不了它抢走 Ctrl+D?别删条目,用负号语法最干净。
- 在
keybindings.json末尾追加:[{"key":"ctrl+d","command":"-editor.action.addSelectionToNextFindMatch"}] - 这个
-前缀表示“取消该 command 的默认绑定”,VSCode 会立即释放该组合键 - 禁用后不会变灰、不报错,但该快捷键也不再触发——你得自己补一条新绑定,否则就真废了
- 命令 ID 一定要从图形界面右键复制,不要手敲;
command字段不能为空字符串,否则整条规则被忽略
真正麻烦的不是写几行 JSON,而是 when 条件和系统级拦截之间的博弈——同一套配置,在同事电脑上好使,在你这儿按了没反应,八成是输入法或 keyboard.dispatch 没调对。











