VSCode大括号内代码不格式化,主因是语言识别失败(如显示Plain Text)、Prettier未绑定到对应语言ID、或prettier.config.js/.prettierrc语法错误导致静默退出。

VSCode 里大括号内代码不格式化,不是 Prettier “坏了”,而是它压根没被调用,或者调用了但规则没生效——问题通常卡在语言识别、格式化器绑定、配置加载这三步上。
右下角语言模式显示 Plain Text 就别往下看了
这是最常见、最隐蔽的失效起点。VSCode 只对明确语言 ID(如 typescriptreact、jsonc)启用格式化链路;一旦显示 Plain Text 或 Unknown,editor.formatOnSave 和快捷键都会静默跳过。
- 点击右下角语言标识,手动输入真实语言名(注意大小写和拼写:
typescriptreact≠typescript,前者才支持 JSX 解析) - 检查文件后缀是否匹配:比如
vite.config.ts被当成javascript,会导致prettier.importOrderParserPlugins这类 TS 特有配置被忽略 - 对自定义配置文件,在
settings.json中显式声明关联:"files.associations": { "vite.config.*": "typescript" }
Format Document With 列表为空说明格式化器根本没注册
按 Ctrl+Shift+P 输入 Format Document With,如果列表空或只有 Configure Default Formatter…,说明 VSCode 没为当前语言找到可用的 formatter 扩展。
- 确认已安装对应扩展:TypeScript/JS 项目必须装
esbenp.prettier-vscode;Python 需ms-python.python或ms-python.black-formatter - 检查是否启用了该扩展:在扩展视图中搜索名称,确保状态是「启用」而非「已禁用(工作区)」
- 某些 formatter(如
black)需本地可执行:终端运行which black(macOS/Linux)或where black(Windows),无输出则需pip install black
prettier.config.js 语法错误会导致静默退出
Prettier 遇到配置解析失败时不会报错,而是直接放弃加载规则,退回到“什么都不做”状态——看起来像失效,其实是连规则都没读进去。
-
.prettierrc必须是合法 JSON:键和字符串值必须用双引号,不能有注释、尾随逗号、单引号 - 推荐改用
prettier.config.js:支持 JS 语法和注释,容错性高,例如:module.exports = { semi: true, trailingComma: 'es5', // 注释在这里完全合法 }; - 运行
npx prettier --debug-check index.js,它会明确指出哪一行、哪个键出错(比如trailingcomma拼错,或endOfLine值写成"LF"而非"lf")
editor.defaultFormatter 绑定错了语言块就白配
VSCode 的 editor.defaultFormatter 是按语言 ID 绑定的,不是全局一刀切。你装了 Prettier,但没告诉它“这个语言归你管”,它就不会动。
- 打开设置搜
default formatter,展开JavaScript › Default Formatter和TypeScript › Default Formatter,下拉选esbenp.prettier-vscode(注意拼写,不能少字母或多空格) - HTML/Vue/MDX 等非标准语言需手动加语言块:
"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } - 检查工作区
.vscode/settings.json是否覆盖了全局设置,例如写了"[javascript]": { "editor.formatOnSave": false },会直接关掉所有 JS 文件的自动格式化
真正麻烦的点往往藏在多层配置叠加里:工作区设置覆盖用户设置、语言块配置覆盖全局、prettier.requireConfig: true 却漏了子包配置文件——这些地方不报错,只沉默,得一层层剥开看。


















