在 settings.json 中为对应语言 ID(如 "[typescriptreact]")显式配置 "editor.defaultFormatter": "esbenp.prettier-vscode",确保 ID 与扩展市场完全一致,才能永久设为默认格式化程序。

VSCode弹出“选择默认格式化程序”提示,怎么永久设为默认?
这不是警告,是 VSCode 在告诉你:它识别出了文件类型(比如 .ts),但没找到你明确指定的格式化器——所以每次都要手动选。想让它“记住”,必须在 settings.json 里为对应语言 ID 显式绑定,而不是点一次选框就完事。
- 右下角看语言模式,比如显示
typescriptreact,就得配"[typescriptreact]",只配"[typescript]"对.tsx文件完全无效 - 打开设置(
Ctrl+,),点右上角「打开设置(JSON)」图标,往里面加语言专属块,不是改顶层editor.defaultFormatter - 格式化器 ID 必须和扩展市场页面显示的**一字不差**:
esbenp.prettier-vscode(注意是prettier-vscode,不是prettier或prettier-vscode-) - 如果同时装了
esbenp.prettier-vscode和HookyQR.beautify,不配语言块,VSCode 就永远弹窗;配了,另一个插件基本等于没装
为什么“Format Document With”选了 Prettier 还是没反应?
这个命令只是临时调用,不会改变任何默认绑定逻辑。它甚至不写入任何配置,下次打开新文件照样从头问你。
- 按
Ctrl+Shift+P→ 输入Format Document With→ 选Prettier,这只是单次执行,连当前工作区都不记 - 真正起效的是
settings.json里的语言块,比如"[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"} - 验证是否生效:保存一个
.js文件,然后打开 Output 面板 → 切到Log (Window),能看到实际调用的扩展 ID,比如esbenp.prettier-vscode
多个格式化器共存时,VSCode 到底用谁?
它不排序、不合并、不协商。只认你明确定义的那个,其他全忽略。所谓“冲突”,其实是你没做主,让它自己猜。
- 装了
esbenp.prettier-vscode和dbaeumer.vscode-eslint,又没配语言块 → 每次都弹窗让你选 - 配了
"[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}→ ESLint 插件对.ts文件彻底失能(除非你额外配editor.codeActionsOnSave) - 某些插件(如
xaver.clang-format)依赖系统 PATH 里的可执行文件,路径不对就静默失败,连错误提示都不给,看起来就像“没反应” - 禁用不需要的格式化器扩展,比靠配置压优先级更可靠;VSCode 不保证多格式化器共存时的执行顺序
保存时自动格式化失效,但“Format Document With”能用
说明格式化器本身能跑通,问题出在触发链上——editor.formatOnSave 开关没开,或被更细粒度的设置覆盖了。
-
editor.formatOnSave必须为true,且建议放在用户级settings.json,避免被工作区设置覆盖 - 检查当前文件的语言 ID 是否匹配:按
Ctrl+Shift+P→Change Language Mode,确认右下角显示的是typescript而不是Plain Text - 有些格式化器(如 Prettier)默认不强制读配置文件;若项目有
.prettierrc却不生效,要加"prettier.requireConfig": true -
editor.formatOnSaveMode设为modifications时,仅格式化修改部分,全量保存可能“看起来没动”,建议先设为file


















