应统一 Prettier 与 ESLint 职责、配置。editorconfig 强制基础格式、禁用冲突语言扩展的格式化功能、优先使用 Format Selection。需在项目根目录配置。prettierrc 和。eslintrc.js,安装 EditorConfig 扩展,并为各语言关闭默认格式化。

如果您在 VSCode 中编辑代码时,发现保存后格式化结果与团队规范或个人预期不一致,可能是由于扩展配置、工作区设置或语言特定规则之间存在冲突。以下是解决此问题的步骤:
本文运行环境:MacBook Air,macOS Sequoia。
一、检查并统一 Prettier 与 ESLint 配置优先级
当 Prettier 与 ESLint 同时启用时,若未明确指定谁负责格式化、谁负责校验,二者可能相互覆盖导致不可预测的缩进、引号或分号行为。需通过配置文件声明职责边界,并确保 VSCode 读取顺序正确。
1、在项目根目录创建或编辑 .prettierrc 文件,明确写入团队约定的格式规则,例如:{“semi”: true, “singleQuote”: true, “tabWidth”: 2}。
2、在 .eslintrc.js 中禁用所有与格式化相关的 ESLint 规则,添加:“prettier/prettier”: “error”,并将 eslint-config-prettier 加入 extends 数组末尾。
3、打开 VSCode 设置(Cmd+,),搜索 format on save,确认已启用;再搜索default formatter,为 JavaScript/TypeScript 语言选择esbenp.prettier-vscode 而非dbaeumer.vscode-eslint。
二、使用。editorconfig 隔离基础编辑器行为
.editorconfig文件在 VSCode 启动时即被读取,其规则优先级高于语言扩展,可强制统一换行符、缩进风格等底层编辑行为,避免 Prettier 或 ESLint 因输入源差异而误判。
1、在项目根目录新建 .editorconfig 文件。
2、写入以下内容:[*]nindent_style = spacenindent_size = 2nend_of_line = lfncharset = utf-8ntrim_trailing_whitespace = trueninsert_final_newline = true。
3、安装 VSCode 官方 EditorConfig for VS Code 扩展(作者:EditorConfig),确保其处于启用状态。
三、禁用冲突的语言特定格式化提供者
部分语言扩展(如 Vue Language Features、Angular Language Service)会自带格式化逻辑,与 Prettier 叠加后引发重复处理或规则抵触,需手动关闭其格式化能力,仅保留 Prettier 作为唯一入口。
1、打开 VSCode 命令面板(Cmd+Shift+P),输入Preferences: Configure Language Specific Settings。
2、选择 vue 语言,在右侧 JSON 区域添加:“editor.formatOnSave”: false, “editor.formatOnPaste”: false。
3、对 typescript、javascript、json 等语言重复执行相同操作,确保仅 prettier 扩展响应保存动作。
四、启用 Format Selection 而非 Format Document
全局格式化易放大配置冲突影响范围,尤其在混合风格的历史代码中。针对局部代码块执行格式化,可规避因全文件重排引发的 Git 差异爆炸,也便于人工复核变更点。
1、选中待处理的代码片段(如一个函数或一段 JSX)。
2、右键选择Format Selection,或使用快捷键Cmd+K Cmd+F。
3、确认当前活动窗口右下角显示的格式化提供者为Prettier,而非其他扩展名称。