VS Code保存自动格式化需手动开启Editor: Format On Save设置,并为不同语言指定editor.defaultFormatter,避免与ESLint冲突。

Format On Save 开关在哪找
VS Code 默认不开启保存自动格式化,得手动打开。这个开关藏在设置里,不是靠插件按钮控制的。
- 快捷键
Ctrl+,(Windows/Linux)或Cmd+,(macOS)打开设置 - 右上角点搜索图标,输入
format on save - 勾选
Editor: Format On Save这一项就行
别去扩展市场搜“auto format”插件——除非你用的是非标准语言,否则原生功能已够用。
为什么保存后没格式化?常见断点
开了开关却没反应,大概率是下面几个环节断了:
-
editor.defaultFormatter没设:VS Code 不知道该用谁来格式化,尤其对.ts、.json、.md这类文件,必须指定默认格式化器 - 当前文件没关联语言模式:右下角状态栏看是不是显示
Plain Text,点它改成TypeScript或对应语言 - 格式化器未安装或禁用:比如用 Prettier,但插件被禁用了,或没在工作区启用
-
editor.formatOnSaveTimeout设得太小(默认 750ms),大文件直接超时放弃
检查方法:按 Ctrl+Shift+P 输入 Format Document With...,看有没有可用选项;没有就说明格式化器缺失或未激活。
不同语言怎么配默认格式化器
同一个开关,不同语言行为可能完全不同,因为背后调用的工具不一样:
- TypeScript/JavaScript:推荐装
Prettier插件,然后在设置里把editor.defaultFormatter设为esbenp.prettier-vscode - Python:用
ms-python.python自带的autopep8或black,需在设置中指定python.formatting.provider - JSON:VS Code 内置支持,无需插件,但要确保文件语言模式是
JSON(不是JSON with Comments) - Markdown:
esbenp.prettier-vscode支持,但需在prettier.config.js里加"parser": "markdown"才生效
注意:editor.defaultFormatter 是全局设置,建议改到工作区(.vscode/settings.json)里,避免影响其他项目。
Format On Save 和 ESLint / Prettier 冲突怎么办
两者都开时,容易出现“保存后代码又被改了一次”或者“格式化失效”,本质是执行顺序和规则打架:
- ESLint 的
eslint.format.enable如果为true,会抢在 Prettier 前格式化,结果可能不符合 Prettier 规则 - 推荐只留一个主力格式化器:Prettier 负责样式,ESLint 负责逻辑检查;关掉 ESLint 的格式化能力,只保留
eslint.validate - 如果非要共存,用
eslint-plugin-prettier把 Prettier 规则塞进 ESLint,再统一由 ESLint 驱动格式化
最容易被忽略的是:某些项目用了 prettier-eslint 这类桥接工具,但它已多年未维护,VS Code 里反而容易卡住或报 Cannot find module 'prettier-eslint' 错误。


















