必须编辑keybindings.json才真正生效,GUI仅支持临时增删;需通过Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)执行“Preferences: Open Keyboard Shortcuts (JSON)”打开用户级配置文件,所有自定义项须写入空数组[]内。

VSCode 快捷键重绑必须改 keybindings.json 才真正生效,GUI 界面(Ctrl+K Ctrl+S)只能临时增删、不支持条件控制,且容易被插件覆盖。
怎么打开正确的 keybindings.json 文件
别点菜单或手动找路径——90% 的“改了没反应”都卡在这一步。按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Open Keyboard Shortcuts (JSON) 回车。VSCode 会自动打开用户级配置文件,路径固定:
- Windows:
%APPDATA%\Code\User\keybindings.json - macOS:
~/Library/Application Support/Code/User/keybindings.json - Linux:
~/.config/Code/User/keybindings.json
文件初始是空数组 [],所有自定义项必须作为对象写在方括号内,不能删掉中括号,也不能把内容粘贴到别的 JSON 文件里。
key 和 command 字段怎么写才不白配
常见报错不是语法错,而是值不合法:
-
key必须小写、无空格;修饰键顺序固定为ctrl→shift→alt→meta(macOS 用cmd,Windows/Linux 用win);例如"ctrl+shift+p"✅,"Ctrl+Shift+P"❌ - 字母键默认小写;想触发大写需显式加
shift,如"ctrl+shift+u"绑的是Ctrl+Shift+U,不是Ctrl+U -
command必须是完整命令 ID,不是中文名;可在 GUI 快捷键面板中悬停目标命令,看 tooltip 显示的字符串,比如editor.action.formatDocument,不是 “格式化文档” - 功能键写全称:
f1、escape、backspace,不能简写为esc或del
为什么按键没反应?重点查 when 条件和三方抢占
多数“失灵”不是绑定失败,而是上下文不匹配或被抢走:
- 想在编辑器里生效?加
"when": "editorTextFocus",否则在终端或资源管理器里按了也白按 - 想只在 Python 文件里触发?用
"when": "editorTextFocus && resourceExtname == '.py'";单写editorLangId == 'python'可能因语言模式未激活而失败 - 查谁在抢你的键:按
Ctrl+Shift+P输入Developer: Toggle Keybinding Troubleshooter回车,再立刻按冲突组合键(如Ctrl+Shift+P),就能看到所有匹配项、来源扩展和是否被覆盖 - 禁用扩展绑定但不卸载:在 GUI 中右键对应条目 →
Copy Command ID,然后在keybindings.json中加一条带-前缀的规则,例如{"key":"ctrl+shift+p","command":"-gitlens.showQuickFileHistory"}
非美式键盘和系统拦截最容易被忽略
中文、日语、德语等键盘用户常遇到 Ctrl+; 绑定失效,实际是 VSCode 把它识别成了 Ctrl+::
- 解决方法:在
settings.json(不是keybindings.json)中添加"keyboard.dispatch": "keyCode" - 系统或输入法劫持:搜狗拼音、Raycast、Logitech Options 常吞掉
Ctrl+Shift+P或Ctrl+Alt+T;临时退出它们再试,比重配十次更有效 - Linux 下
Ctrl+Alt+T是默认唤起终端的系统热键,VSCode 根本收不到——这种组合不适合重绑
真正麻烦的从来不是怎么写,而是改完之后不知道它为什么不动:when 条件太窄、扩展悄悄覆盖、输入法在中间截胡、或者 keybindings.json 里少了个逗号导致整个数组静默失效。


















