keybindings.json 是 vs code 键盘行为的唯一配置入口,需通过命令面板打开以生成合法结构,每条快捷键为数组内对象,key 大小写敏感且修饰键顺序固定,when 条件控制上下文精准生效,command 名须准确查证,跨平台应统一用 ctrl 避免键名冲突。

keybindings.json 是你真正掌控 VS Code 键盘行为的唯一入口,图形界面只是它的前端代理。所有“极客级”定制——比如在 Markdown 里 Ctrl+Enter 预览、在终端里 Cmd+K 清屏、在调试时 F5 跳过断点——都必须靠它实现。
怎么直接改 keybindings.json 才不踩坑
别从空文件开始写。先用命令面板执行 Preferences: Open Keyboard Shortcuts (JSON),让 VS Code 自动生成合法 JSON 数组结构(通常是 [])。手动新建文件容易漏掉方括号或逗号,导致整个快捷键失效。
- 每个快捷键必须是对象,且放在数组内,例如:
[{"key": "ctrl+alt+l", "command": "editor.action.formatDocument"}] -
key值大小写敏感,ctrl不能写成Ctrl;修饰键顺序固定为ctrlshiftaltcmd(macOS)或win(Windows/Linux) - 保存后 VS Code 会自动校验语法,但不会告诉你哪一行错——只报“invalid keybindings”,所以建议每次只加一条,确认生效再继续
when 条件怎么写才精准生效
没加 when 的快捷键是全局生效的,极易和插件、系统级快捷键冲突。比如你想把 Cmd+D 改成“复制当前行”,但又不想在搜索框里也触发——就得限定上下文。
-
editorTextFocus:仅编辑器文本区域有焦点时生效(排除终端、侧边栏、设置页) -
resourceExtname == '.py':只在 Python 文件中响应(注意单引号、等号两边空格、扩展名带点) -
editorTextFocus && !inDebugRepl:编辑器聚焦且不在调试控制台时生效(&&是且,!是否定) - 查不到条件变量?运行
Developer: Inspect Key Mappings,点击任意位置,它会显示当前上下文所有可用when变量
常见命令名在哪找、怎么验证对不对
命令名拼错是自定义失败最隐蔽的原因。VS Code 内部命令名不是自然语言,比如“格式化文档”对应的是 editor.action.formatDocument,而不是 formatDocument 或 format。
- 最可靠方式:打开快捷键图形界面(
Cmd+K Cmd+S),搜索目标功能,悬停在条目上,右下角会显示完整command名 - 命令面板(
Cmd+Shift+P)里输入命令时,括号内显示的就是真实命令 ID - 不确定是否生效?改完保存后,按快捷键,看右下角有没有提示“触发了 xxx 命令”;没有提示,大概率是
command写错或when条件不满足
多设备同步和冲突处理的关键细节
你在 MacBook 上设了一套 Vim 风格导航,在 Windows 笔记本上直接复制 keybindings.json 会出问题——因为 cmd 在 Windows 上不存在,ctrl 和 win 的映射逻辑也不同。
- 跨平台安全写法:用
ctrl代替cmd/win,例如"key": "ctrl+shift+f",VS Code 会自动适配(macOS 下转为Cmd+Shift+F) - 避免覆盖系统快捷键:比如
Cmd+Q(macOS 全局退出)、Alt+Tab(Windows 切换窗口),这些即使配置了也大概率被拦截 - 冲突优先级:用户自定义 > 扩展绑定 > 默认绑定;但更具体的
when条件会压倒更宽泛的规则,比如editorTextFocus && resourceExtname == '.md'比纯editorTextFocus优先级高
when 条件太松或太紧、command 名少了个字母、或者 macOS 和 Windows 键名混用。动手前先用 Developer: Inspect Key Mappings 看一眼当前焦点的上下文,比盲调快十倍。











