直接修改 keybindings.json 文件才真正生效,需通过命令面板执行 Preferences: Open Keyboard Shortcuts (JSON) 打开;所有自定义绑定必须写入该文件的空数组中,command 名和 when 条件须准确,否则快捷键不触发。

直接改 keybindings.json 才算真正生效,GUI 界面只适合试水,一碰冲突、条件或插件干扰就失灵。
怎么打开正确的 keybindings.json 文件
别用“Open Settings (JSON)”——那是改 settings.json 的。必须走命令面板:Ctrl+Shift+P(macOS 是 Cmd+Shift+P)→ 输入 Preferences: Open Keyboard Shortcuts (JSON) → 回车。VSCode 会自动创建空数组 [],你所有自定义项都得塞进这个方括号里。
- 手动去文件系统找路径复制粘贴,容易选错位置或权限异常
- 误开成用户设置文件(
settings.json),改半天没反应 - GUI 界面右键“更改键绑定”生成的其实是 JSON 写法,但不暴露
when细节,后续难调试
command 名写不对,按了也没反应
VSCode 命令名和界面文字经常不一致,比如“保存文件”对应的是 workbench.action.files.save,不是 saveFile 或 file.save。别猜,也别靠记忆。
- 打开命令面板 → 输入
Developer: Inspect Context Keys,点进编辑器再按一次,确认editorTextFocus是 true - 再输
Developer: Toggle Developer Tools,切到 Console 标签页,执行vscode.commands.getCommands().then(console.log),等列表出来后搜关键词(如 “format”) - 图形界面里搜“格式化文档”,点开那条记录,右键选“将键绑定复制为 JSON”,直接拿到准确
command
加了快捷键却没触发?大概率是 when 条件太窄
when 字段为空时,默认只在编辑器有焦点时生效(即 editorTextFocus),但你在终端、设置页、搜索框里按,它就完全静默——VSCode 不报错,也不提示,直接忽略。
- 要全局生效,删掉
when字段,或显式写"when": "" - 想限制语言场景,比如 TypeScript 里
Ctrl+Shift+I触发editor.action.organizeImports,但 Markdown 里保持原功能,就得加"when": "editorTextFocus && editorLangId == 'typescript' - 同一
key绑了多条规则?VSCode 按匹配度选最具体的那条,不是按顺序。比如{"key":"ctrl+k","command":"a"}和{"key":"ctrl+k","command":"b","when":"terminalFocus"},只有终端里按才触发b
覆盖默认键(比如 Ctrl+S)前必须留退路
直接覆盖高频键风险高,协作或临时换机器时容易卡壳。真要改,得控范围、留备用。
- 别只改
Ctrl+S,顺手加一条Ctrl+Alt+S做“强保存”:带自动暂存 + 提交前检查;而原Ctrl+S改成只触发workbench.action.files.save,不走插件逻辑 - 想彻底禁用某默认键?不用删,加一条
{"key":"ctrl+k ctrl+i","command":"-editor.action.showHover"}—— 注意-必须紧挨着命令名,不能有空格 - 非美式键盘用户(如中文、德语)常遇到
Ctrl+;被识别成Ctrl+:,解决方法是在settings.json里加"keyboard.dispatch":"keyCode"
真正麻烦的从来不是写几行 JSON,而是 when 条件没写准、command 名抄错、或者被 GitLens/Vim 插件悄悄劫持了绑定——这些地方不验证,光靠“保存就生效”幻想,十次有九次白忙。


















