vscode快捷键没反应主因是when条件不满足、插件抢占或系统/输入法劫持按键;需用developer: inspect key mappings验证绑定,禁用默认键须加负号前缀,非美式键盘需设"keyboard.dispatch":"keycode"。

为什么改了快捷键却没反应
不是配置写错了,大概率是 when 条件不满足、插件抢占,或者系统/输入法吞掉了按键。VSCode 不报错也不提示,直接静默忽略——这是最让人抓狂的地方。
常见现象包括:
- 在终端里按了自定义的
ctrl+shift+t,但只打开了新终端标签,没触发你的命令 - 写了
"when": "editorLangId == 'python'",结果在 .py 文件里按也没反应(语言模式可能还没激活,得用resourceExtname == '.py'更稳) - 搜狗拼音、Logitech Options、Raycast 正在后台运行,
ctrl+;或ctrl+shift+p根本传不到 VSCode
验证方法:打开命令面板,运行 Developer: Inspect Key Mappings,然后按你的组合键,看它到底被谁绑定了、when 是否为 true。
怎么安全禁用默认快捷键
别删默认项,也别写 "command": ""——VSCode 会直接跳过整条规则。正确做法是用负号前缀 - 显式“取消绑定”。
例如想释放 ctrl+k ctrl+i 用来查文档悬停,就得加这条:
[{"key":"ctrl+k ctrl+i","command":"-editor.action.showHover"}]
注意:- 必须紧挨着命令名,不能有空格;也不能写成 "- editor.action.showHover",否则无效。命令 ID 可在 GUI 快捷键面板中右键某条目 → “复制命令 ID” 获取。
非美式键盘用户必须调的隐藏设置
中文、德语、日语等键盘布局下,ctrl+; 常被识别成 ctrl+:,导致自定义失效。这不是 bug,而是 VSCode 默认按字符 dispatch 导致的映射错乱。
解决方法:打开 settings.json(不是 keybindings.json),添加:
"keyboard.dispatch":"keyCode"
这个设置让 VSCode 按物理按键位置而非输入字符判断,所有基于 ;、[、] 的组合键都能正常工作。不加这行,你可能反复修改十次 keybindings.json 都白搭。
keybindings.json 里怎么写才不踩坑
GUI 界面(ctrl+k ctrl+s)只适合简单增删,一涉及条件、覆盖、冲突,就必须进 JSON 编辑。关键点:
-
key必须小写,修饰键顺序固定为ctrl→shift→alt→meta(macOS 用cmd,Windows/Linux 用win),比如"ctrl+shift+p"✅,"Ctrl+Shift+P"❌ -
command必须是完整命令 ID,不是中文名,比如editor.action.formatDocument,不是 “格式化文档” - 字母键默认小写;想触发大写需显式加
shift,如"ctrl+shift+u" - 功能键写全称:
f1、escape、backspace,不能简写为esc或del - 文件初始为空数组
[],所有自定义项必须作为对象写在方括号内,不能删掉中括号
漏一个逗号、多一个引号、when 写错字段名(比如写成 editorFocus 而不是 editorTextFocus),整块快捷键就静默失效,且无任何提示。











