VS Code用户设置全局生效,工作区设置仅限当前项目;前者存于全局settings.json,后者存于项目内.vscode/settings.json并可被Git误提交;多根工作区需配置.code-workspace文件。

VS Code 的用户设置(全局)和工作区设置(项目级)本质是两层覆盖关系:工作区配置会覆盖同名的用户配置,但仅对当前文件夹生效。关键不是“怎么区分”,而是“什么时候该写在哪”。
用户设置 vs 工作区设置的实际影响范围
用户设置保存在 settings.json 全局文件中(可通过 Ctrl+, → 右上角打开设置 JSON),影响所有打开的文件夹;工作区设置保存在当前项目根目录下的 .vscode/settings.json,只对这个文件夹及其子目录生效。注意:工作区设置不会继承到其他项目,也不会被 Git 默认忽略——如果误提交了含敏感路径或团队不一致配置的 .vscode/settings.json,可能引发协作问题。
- 适合放用户设置的:字体大小、主题、自动保存开关、终端默认 Shell
- 适合放工作区设置的:ESLint 路径、TypeScript 版本、Python 解释器路径、特定于项目的代码格式化规则
- 绝对不要放工作区设置的:你的个人 API token、本地调试端口(除非明确需共享)、SSH 密钥路径
快速切换和编辑两种设置的快捷方式
别手动找文件。直接用命令面板:Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(macOS),输入以下命令即可精准打开对应配置:
-
Preferences: Open Settings (JSON)→ 打开用户settings.json -
Preferences: Open Workspace Settings (JSON)→ 打开当前工作区.vscode/settings.json -
Preferences: Open Settings→ 图形化界面,右下角可切换“User”/“Workspace”标签
图形界面里看到某条设置右侧有小图标(如齿轮、文件夹),就说明它当前生效层级——灰色齿轮是用户级,蓝色文件夹是工作区级。
工作区设置被忽略的常见原因
明明写了 .vscode/settings.json 却没生效?大概率是这几个原因:
- 项目根目录没打开为工作区:VS Code 必须以该文件夹为“工作区”启动(即通过
File → Open Folder),而不是只打开其中某个文件 -
.vscode文件夹权限被系统阻止写入(尤其 macOS 上某些挂载卷) - 设置了
"settingsSync.ignoredSettings": ["editor.fontSize"]类同步忽略项,导致部分配置被跳过 - 扩展自身强制覆盖(例如 Prettier 扩展读取
.prettierrc优先于settings.json中的prettier.*配置)
多根工作区下工作区设置的特殊行为
当你用 File → Add Folder to Workspace 添加多个文件夹时,VS Code 会生成一个 .code-workspace 文件。此时工作区设置不再存在单个 .vscode/settings.json,而应写在该 .code-workspace 文件的 "settings" 字段里。它对整个多根工作区生效,但依然不触达其他独立打开的文件夹。
容易被忽略的是:这种设置无法被 Git 跟踪(因为 .code-workspace 是二进制/非标准 JSON 格式,且通常含绝对路径),也不建议共享给团队——不同人本地路径不同,"python.defaultInterpreterPath" 这类配置极易出错。










