VSCode保存自动格式化需同时满足:editor.formatOnSave为true(且未被工作区或语言设置覆盖)、按语言ID指定editor.defaultFormatter(如"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"})、files.autoSave非off,并确保格式化插件已启用且语言模式匹配。

editor.formatOnSave 必须为 true,且不能被覆盖
VSCode 默认关闭保存自动格式化,editor.formatOnSave 是总开关,值必须是 true,否则其他配置全无效。它可能在三处被设为 false:用户级 settings.json、工作区级 .vscode/settings.json、或语言专属设置(如 "[javascript]": { "editor.formatOnSave": false })。优先检查工作区设置——很多项目根目录的 .vscode/settings.json 会显式关掉它,导致你改了全局设置也没用。
defaultFormatter 按语言指定,不能只写全局
VSCode 不接受笼统的 "editor.defaultFormatter": "esbenp.prettier-vscode"。这个配置只对“未识别语言”生效,而 JavaScript、TypeScript、Vue 等都有独立 language ID,必须用方括号语法绑定:
"[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }-
"[vue]": { "editor.defaultFormatter": "octref.vetur" }(注意 Vetur 和 Prettier 在 Vue 中常需配合)
漏掉某一种语言,保存该类型文件时就静默跳过。右下角语言标识点开后选「Configure Default Formatter」可交互补全,但生成的配置仍需手动加方括号包裹。
Format Document With 列表为空?说明 formatter 没注册成功
按 Ctrl+Shift+P 输入 Format Document With,如果列表里只有 Configure Default Formatter…,代表 VSCode 根本没加载到可用的格式化器。常见原因有:
- 插件没启用:在扩展面板里确认
esbenp.prettier-vscode或ms-python.black-formatter状态是「启用」而非「已禁用」 - 语言模式错误:右下角显示
Plain Text或JavaScript React却没配对应 formatter;.js文件被识别成javascriptreact就得配"[javascriptreact]"而非"[javascript]" - 插件依赖缺失:比如 Python 的
black需本地pip install black,否则扩展会静默失败,控制台(Developer: Toggle Developer Tools)里能看到command not found
formatOnSaveMode 设成 modifications 容易假失效
VSCode 1.84+ 默认 editor.formatOnSaveMode 是 file,但有人为“提速”改成 modifications,结果反而格式化不触发。因为该模式依赖准确的 diff,遇到以下情况会直接放弃:
- 文件含 Git 冲突标记(
<<<< HEAD) - 语法错误(如未闭合字符串、
Unterminated string literal) - 文件过大(>2MB),diff 计算超时
此时 VSCode 不报错也不提示,就像没配置一样。真要性能优化,不如保持 file 模式,再关掉耗时规则(如 Prettier 的 printWidth 设大些),别碰 modifications。
最常被忽略的是:files.autoSave 关着时,editor.formatOnSave 根本不会跑。哪怕你所有参数都对,只要没开自动保存或手动 Ctrl+S,格式化逻辑压根不启动。


















