全局 settings.json 仅适合个人单项目或临时调试,团队协作必须用项目级配置;因其用户级特性会导致多项目规则冲突,且他人 clone 后无法继承本地设置,造成格式混乱和 diff 泛滥。

全局设置只适合“个人单项目流”或临时调试,团队协作中必须用项目级配置,否则换个项目就失效、格式混乱。
为什么不能只靠全局 settings.json
VSCode 的全局 settings.json 是用户级的,对所有打开的文件夹都生效。一旦你在 A 项目里配了单引号 + 无分号,B 项目却要求双引号 + 分号,全局配置就会互相冲突。更麻烦的是:别人 clone 你的仓库,根本看不到你本地的全局设置,代码一提交就是满屏格式 diff。
真正可靠的方案是「全局设兜底,项目管实际」——全局只留最基础的开关和默认格式化器,具体规则全交给项目根目录的 .prettierrc 或 .editorconfig 管。
-
editor.defaultFormatter可以全局设为"esbenp.prettier-vscode",避免语言没指定格式化器时 fallback 到 VSCode 内置(它不认printWidth这类规则) -
editor.formatOnSave全局开启没问题,但必须配合项目级.prettierrc才有意义 - 别在全局写
prettier.semi、prettier.singleQuote这类具体规则——它们会被项目里的.prettierrc覆盖,纯属干扰判断
全局 settings.json 必须写的三项
打开 VSCode,按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Preferences: Open Settings (JSON) 回车。粘贴以下内容(覆盖已有内容或追加):
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"files.eol": "\n"
}
说明:
-
editor.defaultFormatter指定 Prettier 扩展为默认格式化器,防止 JS/TS 文件被 TypeScript 自带格式化器接管(它不支持trailingComma等风格规则) -
editor.formatOnSave是自动格式化的开关,不开它,其他都白搭 -
files.eol强制统一换行符为\n(LF),避免 Windows 用户提交 CRLF 导致 Git 显示大量无关改动
容易被忽略的三个坑
很多人配完发现保存没反应,问题往往出在这三处:
- Prettier 扩展没装,或者装了但禁用了——检查扩展面板里
esbenp.prettier-vscode是否启用 - 当前文件类型没被 Prettier 支持:比如你打开的是
.vue文件但没装Vetur或Volar,Prettier 默认不处理<template></template>块;同理,.md需要Markdown All in One配合 - 项目根目录有
.prettierrc,但内容为空或语法错误(比如多了一个逗号),Prettier 会静默失败,不报错也不格式化
什么时候该用项目级 settings.json 而不是全局
当你遇到这些情况,立刻停用全局规则,改用项目级:
- 团队有明确的代码规范文档(比如「缩进 2 空格、单引号、无分号」)
- 项目里同时存在 JS 和 TS,但 TS 要求严格类型对齐,JS 可宽松些
- 你参与多个技术栈不同的项目(React + Go + Python),每种语言需要不同格式化器
做法很简单:在项目根目录建 .vscode/settings.json,只写覆盖项,例如:
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
注意:.vscode/settings.json 不进 Git(通常被 .gitignore 拦了),所以真正要版本控制的是 .prettierrc 和 .editorconfig ——这才是跨人、跨系统、跨编辑器生效的关键。


















