先看按键是否被劫持:用developer: toggle keybinding troubleshooter排查冲突,多条结果为真实冲突,无记录则按键未送达;再查右下角语言模式是否正确及editor.defaultformatter是否按语言id精准配置。

格式化快捷键没反应,先看按键有没有被劫持
按 Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac),输入 Developer: Toggle Keybinding Troubleshooter 并回车,接着立刻按下你失效的组合键(比如 Shift+Alt+F)。面板会列出所有匹配项:
- 看到多条结果且来源不同 → 真实冲突,常见抢键者有
GitLens、Vim插件、ESLint,还有系统输入法(如搜狗拼音把Shift+Alt当中英文切换键) - 只有一条但状态为灰色 → 不是插件问题,而是当前上下文不满足触发条件(比如编辑器没聚焦、文件没保存、语言模式不对)
- 面板里完全没记录 → 键根本没传进 VS Code,大概率被系统/输入法/键盘硬件拦截
右下角语言模式正确,但格式化仍灰色不可用
灰色 = VS Code 认为“当前文件不支持格式化”,核心就两个原因:语言 ID 没对上,或该语言没声明默认格式化器。
- 点击右下角语言标识(如
JavaScript),确认不是Plain Text,也别拼错(typescriptreact≠typescript) - 打开
settings.json,搜索editor.defaultFormatter,确保有对应语言块,例如:{ "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } } - 检查该格式化器是否已启用;如果同时装了
ESLint,必须关掉它的格式能力:"eslint.format.enable": false - 删掉可能存在的负向覆盖,比如
"[javascript]": { "editor.formatOnSave": false }这类设置会让格式化直接禁用
手动改了 keybindings.json,但快捷键还是没变
VS Code 1.118 版本起,keybindings.json 手动修改容易静默失效,三个隐性坑最常踩:
- 写错命令 ID:必须用完整命令名,比如
editor.action.formatDocument,不能简写成formatDocument - when 条件冲突:加了
when字段但表达式不满足(如editorTextFocus && !editorReadonly,而当前编辑器只读) - 优先级被覆盖:工作区级
keybindings.json会覆盖用户级,但若插件自带更高优先级绑定(如Vim插件重绑了gq),你的配置可能被无视
Prettier 和 Black 同时启用,Python 文件格式化乱套
Python 项目混用前端格式化插件是高危操作,尤其当 Prettier 和 Black 都设为默认时,VS Code 会随机调用其中一个,导致缩进错乱、引号不统一、甚至 HTML 模板被强行重排。
- 禁用
Python官方插件(ms-python.python),只留Pylance(ms-python.pylance)——它负责语言服务,不碰格式化 - 明确指定 Python 专属格式化器:
{ "[python]": { "editor.defaultFormatter": "ms-python.black-formatter" } } - 删掉全局
editor.defaultFormatter对 Python 的误配,避免和语言专属设置打架 - 如果项目含 .html 或 .vue,确保没在
[html]块里意外启用了esbenp.prettier-vscode,否则 Python 文件可能被错误识别为 HTML











