快捷键失效主因是按键未送达vs code或被系统/插件/条件过滤;需依次排查输入法劫持、keybindings.json字段配对(key全小写、command真实id、when布尔表达式)、插件覆盖、上下文命令可用性。

快捷键没反应,90% 不是 VSCode 坏了,而是你按下的键根本没进编辑器,或者进了但被条件过滤、被插件覆盖、被命令 ID 写错直接忽略。
按键压根没传到 VS Code
这是最常被忽略的第一环。VS Code 不报错,也不提示,只当没这回事。
- Windows 用户重点检查搜狗/微软拼音是否启用了
Shift+Alt切换中英文 —— 这会直接吞掉shift+alt+f等格式化快捷键 - macOS 用户去「系统设置 → 键盘 → 快捷键」里搜
cmd+shift+f,确认没被「聚焦搜索」或「强制退出」占用 - Logitech Options、Raycast、Alfred 这类工具也常劫持
ctrl+shift+p或ctrl+;,临时退出再试 - 验证方式:在 VS Code 窗口焦点下,按
ctrl+shift+p→ 输入Developer: Toggle Developer Tools,打开控制台,再按你的目标快捷键 —— 如果控制台完全没日志,说明按键根本没送达
keybindings.json 里写了但不生效
不是语法错,而是三个字段没配对:key、command、when 缺一不可,且大小写、空格、修饰键顺序都敏感。
-
key必须全小写,修饰键顺序固定为ctrl→shift→alt→meta(macOS 写meta,不是cmd);"Ctrl+Shift+P"❌,"ctrl+shift+p"✅ -
command必须是真实注册的命令 ID,不是中文名;可在 GUI 快捷键面板中悬停目标命令看 tooltip,比如editor.action.formatDocument,不是 “格式化文档” -
when是布尔表达式,漏一个就静默失效:"editorTextFocus && !editorReadonly"表示“光标在可编辑文本中才触发”,若你在终端或资源管理器里按,它就完全不响 - 别留空数组
[]或开头加//注释 —— JSON 不支持行注释,VS Code 会直接降级用默认绑定
被插件或默认绑定悄悄覆盖
GitLens、Vim、Prettier 这些插件自带大量快捷键,它们的 when 条件往往比你的更精确,优先级更高。
- 按
ctrl+k ctrl+s打开快捷键面板,搜索你的组合键(如ctrl+shift+b),看“来源”列是Default、Extension还是User - 想查谁在抢
ctrl+p:打开 DevTools Console,运行console.log(JSON.stringify(monaco.keymaps.KeybindingsRegistry.getBoundKeybindings('workbench.action.quickOpen'), null, 2)) - 安全禁用默认绑定不是删条目,而是加减号前缀:
{"key":"ctrl+k ctrl+i","command":"-editor.action.showHover"} - 后添加的条目会覆盖前面同
key的绑定,所以自定义项建议统一放在keybindings.json数组末尾
命令本身在当前上下文不可用
VS Code 不会执行一个“不存在”的命令,也不会报错,只是静音。
-
editor.action.commentLine在plaintext模式下不注册,所以ctrl+/在纯文本文件里必然失效 - 右下角状态栏显示
JSONC时,shift+alt+f不会调用 JSON 格式器;点它,手动选JSON(不是JSONC)再试 - 按
ctrl+shift+p→ 输入Format Document With…,如果列表为空,说明当前语言没装或没启用对应格式化扩展 - 检查
settings.json里有没有"[json]": { "editor.formatOnSave": false }这类语言块覆盖,它会让格式化能力直接绕过
真正麻烦的从来不是怎么加一条快捷键,而是当它不响时,得一层层往下扒:系统 → 输入法 → VS Code 接收 → 插件竞争 → 上下文条件 → 命令可用性。每层都可能静默失败,没有报错,也没有提示。











