唯一可靠方式是通过命令面板输入“preferences: open keyboard shortcuts (json)”打开keybindings.json;gui界面仅支持简单增删,涉及冲突覆盖、when条件或插件抢占时必然失效,所有真正生效的快捷键配置均以此文件为准。

直接打开 keybindings.json 是唯一可靠方式
GUI 界面(Ctrl+K Ctrl+S)只能做简单增删,一涉及冲突覆盖、条件触发或插件抢占,就失效。真正生效的配置只在 keybindings.json 里——它才是 VSCode 快捷键系统的唯一事实来源。
别用 Preferences: Open Settings (JSON),那是改 settings.json 的,和快捷键无关。必须走命令面板:
-
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Preferences: Open Keyboard Shortcuts (JSON)并回车 - VSCode 会自动创建空数组
[],所有自定义项都得塞进这个方括号里
keybindings.json 的结构和字段怎么写
每个条目是 JSON 对象,至少包含 key 和 command 两个字段;when 是可选但强烈建议加的限定条件。
常见错误包括:key 写成大写(如 Ctrl+Shift+P),实际必须全小写且无空格;修饰键顺序必须是 ctrl→shift→alt→meta(macOS 用 cmd,Windows/Linux 用 win)。
-
"key": "ctrl+shift+k"✅ -
"key": "Ctrl+Shift+K"❌(不生效) -
"command": "editor.action.insertLineAfter"—— 命令名必须准确,可在命令面板搜验证 -
"when": "editorTextFocus && !editorReadonly"—— 避免在终端或资源管理器里误触
为什么新加的快捷键按了没反应
不是配置写错了,大概率是这三类问题之一:
-
when条件不满足:比如写了"when": "editorTextFocus",但你在侧边栏或调试控制台里按,VSCode 直接静默忽略,也不报错 - 被插件劫持:GitLens、Vim 扩展等自带大量绑定,且优先级高于用户配置;查占用最准的方式是在
Ctrl+K Ctrl+S搜索你的快捷键组合,看“来源”列是Default、Extension还是User - 系统或输入法拦截:搜狗拼音、Logitech Options、Raycast 常偷偷吞掉
Ctrl+Shift+P或Ctrl+;这类组合键;临时退出它们再试一次,比重配十次更有效
禁用默认快捷键要怎么写才安全
想彻底关掉某个默认行为(比如不想让 Cmd+D 触发多光标),不能只删 GUI 里的条目,得在 keybindings.json 里显式禁用:
- 写
"command": "-editor.action.addSelectionToNextFindMatch"(前面加减号)是官方推荐的禁用写法 - 写
"command": ""也能屏蔽,但部分命令可能仍被插件响应,不如减号写法干净 - 禁用后务必检查是否被其他扩展重新绑定——有些插件会在启动时自动注册同 key 的新 command
复杂点在于 when 条件的嵌套逻辑和插件绑定的隐式覆盖,这两处最容易被忽略,但恰恰决定你改的键到底能不能用上。











