关掉 editor.formatonsave 仅是起点,还需同步关闭工作区设置、插件级配置(如 prettier.requireconfig、eslint.format.enable)及 editor.codeactionsonsave,否则仍会格式化。

关掉 editor.formatOnSave 就行,但光改这一项经常没用——因为 VS Code 的格式化开关是分层的,插件、语言配置、工作区设置都可能覆盖它。
为什么关了 editor.formatOnSave 还在格式化?
常见错误现象:图形界面勾选取消了,保存时代码还是被重排;或者改了用户 settings.json,项目里照样格式化。
- 项目根目录存在
.vscode/settings.json,里面写了"editor.formatOnSave": true→ 优先级最高,必须手动删或改掉 - 装了 Prettier、ESLint 或其他格式化插件,它们自带独立的保存钩子:
prettier.requireConfig、eslint.format.enable、javascript.format.enable等设为false才真正禁用 - 用了
editor.codeActionsOnSave(比如"source.fixAll.eslint"),这个比formatOnSave更底层,也得清空或设为false
怎么正确关掉?三类场景对应三种操作
别只盯着一个开关,得看你在哪写代码、用什么插件、团队有没有统一配置。
- 全局禁用(所有项目):打开命令面板
Ctrl + Shift + P→ 输入Preferences: Open User Settings (JSON)→ 加入"editor.formatOnSave": false,保存 - 只禁某语言(如 JS 不格式化,Python 照常):在同个
settings.json里加"[javascript]": {"editor.formatOnSave": false},注意方括号和引号不能少,javascript是标准 languageId,不是js或JavaScript - 仅当前项目禁用:在项目根目录建
.vscode/settings.json,写入{"editor.formatOnSave": false, "editor.formatOnType": false},这个文件建议加进.gitignore
插件级干扰最常被忽略
很多人的“关不掉”根本不是 VS Code 自身问题,而是插件自己注册了保存事件。
- Prettier 插件:除了
editor.formatOnSave,还要确认prettier.requireConfig是false,否则它会等配置文件出现才启动,导致行为不稳定 - ESLint 插件:关掉
eslint.format.enable,否则即使 VS Code 不动,ESLint 仍会在保存时调用fix - 某些老插件(如 JS-CSS-HTML Formatter)根本不走 VS Code 标准格式化流程,直接监听保存事件——这种只能卸载或禁用插件本身
真正起效的关键不在“关多少”,而在“查清楚谁在动”。右下角状态栏点语言模式(比如「JavaScript」),看显示的是哪个格式器;保存前打开开发者工具(Help → Toggle Developer Tools),看 Console 有没有格式化插件报错或日志。这些细节比盲目改配置有用得多。











