直接改keybindings.json最稳可控,图形界面仅适合试水;必须用命令面板右键复制准确command ID,加when条件限定上下文(如editorTextFocus),避免全局冲突,且需检查JSON语法、作用域覆盖及插件劫持。

直接改 keybindings.json 是最稳、最可控的方式,图形界面适合试水,但真要“舒适”,得靠 JSON 里加 when 条件和精准的 command 绑定。
怎么找到准确的 command 名?别靠猜
VS Code 的命令名必须完全匹配,拼错一个字母就失效。最可靠的方法不是翻文档,而是用命令面板查:
- 按
Ctrl+Shift+P(Mac 用Cmd+Shift+P)打开命令面板 - 输入你要绑定的功能关键词,比如 “toggle sidebar”
- 在结果列表里右键对应项 → 选 “Copy Command ID”
- 粘贴出来的就是真实可用的
command字符串,例如workbench.action.toggleSidebar
常见错误是把 editor.action.formatDocument 写成 formatDocument 或 editor.format,这类缩写全都不认。
why 加 when 条件?否则快捷键会“乱动”
不加 when 的快捷键是全局生效的,比如你绑了 Ctrl+K 删除行,结果在终端里一按,Ctrl+K 就被 VS Code 截走,终端收不到清屏指令——这就是没限定上下文的典型问题。
-
"when": "editorTextFocus":只在代码编辑器有焦点时生效 -
"when": "terminalFocus":仅当光标在终端里才触发 -
"when": "editorTextFocus && !editorReadOnly":编辑器聚焦且文件可写才启用
多个条件用 && 连接,不能用中文顿号或空格。漏掉引号、多打逗号、when 拼错成 whem 都会导致整条规则静默失效,VS Code 不报错也不提示。
key 组合怎么设才不打架?优先级比你想象中复杂
VS Code 的快捷键匹配不是“先到先得”,而是按加载顺序 + 上下文精度双重判断。后加载的规则会覆盖前一条,但更具体的 when 表达式优先级更高。
- 系统级快捷键(如
Cmd+Space调出 Spotlight)永远最高,VS Code 无法覆盖 - 插件注册的快捷键可能和你自定义的冲突,用
Developer: Inspect Key Mappings命令能实时查看当前按键被谁绑定了 - 避免用
Ctrl+S、Ctrl+Q这类浏览器/系统高频键,哪怕你不用浏览器,也容易误触 - 推荐组合:带
Alt或双修饰键(如Ctrl+Alt+L),冲突概率低,手指也容易定位
Mac 用户特别注意:Cmd 键在很多插件里被预占(比如 GitLens 的 Cmd+Shift+G),优先测一遍再固化。
改完不生效?90% 是这三件事没做对
配置保存后不响应,基本逃不出这三个点:
- JSON 文件末尾多了个逗号(JSON 不允许末尾逗号),VS Code 会静默忽略整个数组
- 改的是用户级
keybindings.json,但项目里开了工作区设置,工作区设置会覆盖用户设置 - 快捷键已由某个插件强制锁定(比如 Vim 插件接管了所有方向键),此时需在
when中排除该上下文,或关插件验证
真正影响舒适度的,从来不是键位多炫酷,而是“按下去就一定干我要它干的事,且不在我不希望它动的时候动”。这点上,when 的颗粒度和测试习惯,比键位本身重要得多。


















