vscode格式化失效主因是默认格式化器未指定或被覆盖:必须在settings.json中为各语言(如[javascript]、[html])精确配置"editor.defaultformatter": "esbenp.prettier-vscode",且需安装prettier-plugin-html并声明插件,否则html等文件无法格式化。

VSCode 格式化失效,90% 问题出在“谁有权限格式化”和“谁在抢着格式化”上——不是插件没装,而是它没被委任,或被别的工具静默覆盖。
默认格式化器没指定,Prettier 就是摆设
VSCode 不会自动选 Prettier,哪怕你装了 esbenp.prettier-vscode 插件。它只认 editor.defaultFormatter 设置,且语言级配置(如 "[javascript]")优先级最高。
- 打开
settings.json,确认存在类似配置:{"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, "[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}} - 别写错 ID:
esbenp.prettier-vscode不是prettier、prettier-vscode或拼成pretter - HTML 文件要额外指定:
"[html]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},否则右键“格式化文档”里压根不出现 Prettier
ESLint 和 Prettier 同时开,等于互相抵消
ESLint 的 fix on save 和 Prettier 的 format on save 都在保存时动代码,但规则不一致时,谁后执行谁赢——通常 ESLint 会把 Prettier 刚排好的格式又改回去。
- 禁用 ESLint 的格式能力:在
.eslintrc.js的extends数组末尾加"prettier",并确保它在最后 - 关掉 ESLint 自动修复:设置
"eslint.codeAction.onSave.mode": "none"或删掉"editor.codeActionsOnSave": {"source.fixAll.eslint": true} - 验证是否生效:按
Ctrl+Shift+P→ 输入Format Document With,如果列表里同时有ESLint和Prettier,说明冲突还在
配置文件语法错误,Prettier 直接沉默退出
.prettierrc 里一个逗号放错位置,或用了单引号,Prettier 就加载失败——不报错、不提示、不格式化,就像没装一样。
- 改用
prettier.config.js:支持注释、JS 逻辑、动态配置,不易写错module.exports = {semi: true,singleQuote: true,trailingComma: "es5"} - 终端验证配置是否可读:
npx prettier --debug-check index.js,报错就说明配置解析失败 - 查配置路径:
npx prettier --find-config-path index.js,确认它真读到了你写的那个文件 - HTML 必须加插件:光有 Prettier 不行,得
npm install --save-dev prettier-plugin-html并在 config 里声明plugins: ["prettier-plugin-html"]
快捷键失效?先看是不是被系统或插件劫持了
Shift+Alt+F 按下没反应,大概率不是 VSCode 的问题,而是热键被截胡了。
- Windows 用户重点查输入法:搜狗、微软拼音常把
Shift+Alt当中英文切换键,进系统键盘设置关掉 - macOS 用户查 Spotlight:
Cmd+Shift+F默认是聚焦搜索,进「系统设置 → 键盘 → 快捷键」里关掉 - VS Code 内部查绑定:
Ctrl+Shift+P→Preferences: Open Keyboard Shortcuts (JSON),搜editor.action.formatDocument,看有没有被覆盖 - 临时禁用所有插件测试:如果禁用后快捷键恢复,说明某个插件注册了同名命令但没实现格式化逻辑
最常被忽略的点:格式化器是否真的“在当前文件上下文中可用”。比如 .vue 文件默认语言模式是 vue,但如果你没在 settings.json 里配 "[vue]" 块,或没装 Volar,VSCode 就连调用入口都找不到——它不会猜,也不会 fallback。











