VSCode 自定义快捷键应编辑用户级 keybindings.json 文件,按 Ctrl+Shift+P 输入“Preferences: Open Keyboard Shortcuts (JSON)”打开;每条规则需含 key 和 command 字段,key 遵循修饰键顺序(ctrl、shift、alt、meta)和大小写规范,可用 when 限定作用域,失效时优先检查命令名、冲突及 when 条件匹配。

VSCode 的键盘快捷键可以直接通过 keybindings.json 文件或图形界面修改,但真正稳定、可复用、不被覆盖的方式是编辑 JSON 文件——图形界面改完可能被扩展或更新重置,而手动编辑能精准控制作用域和触发条件。
如何打开并编辑 keybindings.json
按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Open Keyboard Shortcuts (JSON) 并回车。这会直接打开用户级的 keybindings.json,所有自定义都写在这里。
- 不要改默认的
defaultKeybindings.json,那是只读的 - 如果文件为空数组
[],说明你还没加过任何自定义键位,直接往里加对象即可 - 每条快捷键是一个对象,至少包含
key、command两个字段 - 推荐用双引号包裹字符串,避免 VSCode 自动修正时出错
key 字段怎么写才有效?
快捷键组合必须符合 VSCode 的语法规范,常见错误是空格、大小写或修饰键顺序不对。
- 修饰键顺序固定为:
ctrl、shift、alt、meta(macOS 的Cmd,Windows/Linux 的Win) - 键名区分大小写:
"key": "ctrl+shift+p"✅,"ctrl+Shift+P"❌(大写 P 不触发) - 功能键写全称:
f1、escape、backspace,不能简写为esc或del - 字母键默认小写;想绑定大写需显式加
shift,例如"ctrl+shift+u"绑定的是 Ctrl+Shift+U,不是 Ctrl+U
怎样让快捷键只在特定场景生效?
用 when 条件表达式可以限定快捷键的作用域,比如只在编辑器中生效、只对 Markdown 文件生效,或仅当有选中文本时才可用。
-
"when": "editorTextFocus":光标在编辑器内才触发 -
"when": "editorTextFocus && editorLangId == 'python'":仅 Python 文件中生效 -
"when": "editorTextFocus && !editorReadonly":排除只读文件 -
"when": "textInputFocus && !editorTextFocus":适用于搜索框、命令面板等非编辑器输入框 - 多个条件用
&&连接,取反用!,注意括号不支持,只能靠空格和运算符优先级
为什么你加的快捷键没反应?常见排查点
多数失效问题不是语法错,而是被更高优先级规则覆盖或条件不匹配。
- 打开命令面板 →
Developer: Toggle Developer Tools→ Console 标签页,按你的快捷键,看是否有报错如command 'xxx' not found - 检查是否拼错了
command名:比如editor.action.formatDocument不是format.document - 用
Ctrl+K Ctrl+S打开快捷键界面,搜索你设的键位,看右侧是否显示“已设置”,以及有没有灰色提示“已被其他命令占用” - 某些扩展(如 Vim、Emacs 模式)会接管全部按键逻辑,此时
when条件可能被绕过,需要在扩展设置里禁用其键位拦截 - 重启 VSCode 后再试——部分
when表达式在未完全加载时不会生效
最易被忽略的是 when 条件的隐式依赖:比如你想绑定一个“复制当前行”的快捷键,但没加 editorTextFocus,它就可能在终端或侧边栏焦点下静默失败,连报错都不会有。










