VSCode保存不格式化,先确认editor.formatOnSave在工作区settings.json中为true且未被语言块覆盖;再检查editor.defaultFormatter是否拼写正确、对应语言专属配置是否完备;最后验证.prettierrc等配置文件路径语法无误,并确保ESLint与Prettier规则不冲突。

VSCode 保存不格式化,先看 editor.formatOnSave 是否真生效
很多人在设置里勾了“Format on Save”,但团队成员一保存还是原样。这不是开关没开,而是它只在**当前配置层级有效**——用户级设置会被工作区(.vscode/settings.json)覆盖,而后者又可能被语言专属块(如 "[javascript]")进一步覆盖。
实操建议:
- 删掉用户设置里的
editor.formatOnSave,统一写进项目根目录的.vscode/settings.json - 确保该文件已提交到 Git,且未被
.gitignore忽略(常见错误:团队误加.vscode到忽略列表) - 检查有没有语言块显式关掉了它,比如
"[typescript]": {"editor.formatOnSave": false}—— 这种写法会让 TS 文件彻底跳过格式化
editor.defaultFormatter 拼错 ID 就等于没配
VS Code 不会报错提示“找不到格式化器”,而是静默 fallback 到内置简易排版器(只处理基础缩进,不管引号、分号、括号)。你看到的“格式化了但风格不对”,大概率是这个原因。
关键点:
- Python 用
ms-python.black-formatter,不是ms-python.python或black - TypeScript/JavaScript 用
esbenp.prettier-vscode,注意是prettier-vscode,不是prettier或prettier-extension - HTML 文件若用 Prettier,必须同时配
"[html]": {"editor.defaultFormatter": "esbenp.prettier-vscode"},不能只靠全局 defaultFormatter
配置文件路径错、语法错,VS Code 就当它不存在
VS Code 加载 .prettierrc 或 .eslintrc.js 时,既不弹窗也不报错。文件名大小写错(.PRETTIERRC)、放在子目录下(config/.prettierrc)、JSON 多了个逗号——都会导致规则完全不生效,所有人用的全是 Prettier 默认值(比如 semi: true,而你们约定的是 semi: false)。
验证方法:
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Toggle Developer Tools - 在 Console 里搜
prettier或eslint,看有没有Failed to load config类提示 - 用终端执行
npx prettier --write . --debug-check,它会明确告诉你哪个文件没读到、为什么
ESLint 和 Prettier 一起开,必须让 ESLint 放弃样式规则
如果 .eslintrc.js 里还开着 indent、quotes、comma-dangle 这类规则,而 prettier 也在改同一处,就会出现保存一次、代码来回跳动的现象。这不是 bug,是职责没划清。
正确做法:
- 装
eslint-config-prettier,并在extends数组末尾加上'prettier' - 确保
eslint-plugin-prettier已启用,且prettier/prettier规则设为"error" - VS Code 设置里只留一个格式化器:
"editor.defaultFormatter": "dbaeumer.vscode-eslint",并关掉prettier.enable
最常被忽略的是:团队有人本地装了旧版 eslint-config-prettier,它不兼容新 Prettier 的 arrowParens 等字段,结果部分规则照常打架——版本必须对齐。


















