vscode自动格式化需同时开启editor.formatonsave并为每种语言指定defaultformatter,否则即使安装prettier/black/eslint也无效;全局设置defaultformatter会导致非兼容语言报错。

VSCode 自动格式化代码块不是“开个开关就万事大吉”,关键在于明确谁来格式化、什么时候格式化、格式化什么——否则 editor.formatOnSave 一开,ESLint 和 Prettier 就会互相覆盖引号、分号、空行,保存一次变一次样。
为什么 Prettier 和 ESLint 保存后代码反复“打架”
本质是两个工具在争格式控制权:ESLint 默认带部分格式规则(如 quotes、semi),Prettier 又按自己规则重排,结果 Ctrl+S 后单引号→双引号→单引号循环。
- 在项目根目录的
.eslintrc.cjs中,把eslint-config-prettier加到extends数组末尾,显式关掉 ESLint 所有格式类规则 - VS Code 设置里设
"editor.defaultFormatter": "esbenp.prettier-vscode",确保格式化动作由 Prettier 承担 - 禁用 ESLint 插件的格式能力:
"eslint.format.enable": false(它只该报错,不该动排版) - 删掉
editor.formatOnSave—— 改用"editor.codeActionsOnSave": { "source.fixAll.eslint": true },让 ESLint 只修复逻辑问题(如未使用变量),不碰风格
如何只格式化选中代码块,而非整文件
全文件格式化常破坏手写的对齐或注释布局,尤其在配置文件、SQL 片段或前端模板中。VS Code 原生支持精准控制,无需额外插件。
- 选中目标代码(支持多行、跨标签、甚至 HTML 内嵌 script)
- 右键 →
Format Selection(或快捷键Shift+Alt+F/Shift+Option+F) - 若无反应,检查当前语言模式是否正确:右下角应显示
JavaScript、TypeScript等,而非Plain Text - 确认已安装对应语言的格式化器:比如 TypeScript 文件需
prettier或typescript-eslint提供的格式能力,仅装 ESLint 插件不够
格式化失效的三个高频原因
不是插件没装,而是环境链断在某个环节。常见现象包括:保存无反应、选中后提示 “There is no formatter for ‘xxx’-files installed”、.prettierrc 配置不生效。
-
.prettierrc必须放在项目根目录(即包含package.json的那层),且文件名不能是.prettierrc.json或prettier.config.js—— VS Code 插件默认只认.prettierrc(无后缀)或prettier.config.cjs - 工作区设置(
.vscode/settings.json)优先级高于用户设置,若其中写了"editor.formatOnSave": false,全局开关也无效 - 某些语言(如 Vue 单文件组件)需额外启用:在
settings.json中加"prettier.embeddedLanguageFormatting": "auto",否则<script></script>块内不触发
真正卡住效率的,从来不是少一个插件,而是格式化行为失控——比如改一行代码,整页缩进重排;或者想临时保留某段手动对齐,却被自动“修正”。把控制权收回来,比盲目开启更省时间。











