vs code不直接显示被占用快捷键,需通过cmd+k cmd+s(macos)或ctrl+k ctrl+s(win/linux)打开面板查看全量映射;改键无效常因when条件限制或扩展覆盖,自定义json易出错,系统级及终端快捷键不可重定义。

查当前被占用的快捷键
VS Code 本身不直接“告诉你哪些键被用了”,但它会实时检测冲突——你一设新快捷键,它立刻弹提示说 Command+K Command+S 已被“打开键盘快捷方式”占用。真正可靠的方式是进快捷键面板看全量映射。
- macOS:按
Cmd+K Cmd+S(注意是先按住Cmd+K,松开再按Cmd+S) - Windows/Linux:按
Ctrl+K Ctrl+S - 面板里所有命令都列出对应快捷键,空着的表示没绑定,带键位的就是已被占用
- 搜
format、toggle comment这类关键词,能快速定位某功能是否已有快捷键
为什么改快捷键后没生效
常见原因是 when 条件限制或扩展劫持。比如你给 editor.action.formatDocument 设了 Cmd+Shift+F,但该命令默认只在“编辑器有焦点且文档可格式化”时生效;如果光标在终端或搜索框里,它就静默失败。
- 右键命令 → “显示在键盘快捷方式中”,能看到该快捷键的
when条件(如editorTextFocus && !editorReadonly) - 某些扩展(如 Prettier、ESLint)会覆盖默认格式化快捷键,优先级更高
- 冲突时 VS Code 不报错,只是忽略你的设置——必须手动删掉原绑定才能生效
自定义快捷键写进 JSON 容易踩的坑
直接编辑 keybindings.json 看似自由,但少一个逗号、多一个引号、command 拼错,就会让整份配置失效,且无任何提示。
- 务必从快捷键面板点右上角“打开键盘快捷方式(JSON)”图标进入,别手写路径
- 新增绑定用数组追加,不是覆盖:确保最外层是
[...existing, { "key": "...", "command": "..." }] -
command名必须完全匹配,比如editor.action.addCommentLine≠addCommentLine - 改完保存后,按
Cmd+Shift+P输入Developer: Toggle Developer Tools,看 Console 是否报Failed to parse keybindings.json
哪些快捷键根本不能自定义
系统级快捷键和部分硬编码行为无法覆盖,比如 Cmd+Tab(macOS 应用切换)、Cmd+Q(退出 VS Code),还有终端里的 Ctrl+C、Ctrl+V——这些由操作系统或终端模拟器拦截,VS Code 根本收不到。
-
Ctrl+`(切换终端)可以改,但改完后终端可能仍响应原键位,因为 shell 层也监听它 - 多光标相关快捷键(如
Cmd+D)一旦被扩展重映射,容易导致“选中后没反应”,实际是扩展把命令替换成另一个逻辑 - 调试快捷键(
F5、F9)在远程开发(SSH/WSL)场景下,可能被目标系统捕获,本地设置无效
最常被忽略的是 when 条件和扩展覆盖——你以为设好了,其实它只在特定上下文才触发,或者早被某个插件悄悄接管了。真要确认,得进面板查、开 DevTools 看日志、关扩展逐个试。










