VSCode多项目需用工作区隔离:1.创建.code-workspace文件并保存;2.配置分层设置(文件夹级>工作区级>用户级);3.按工作区启用扩展;4.用workbench.colorCustomizations着色区分。

VSCode 本身没有“多用户配置文件”概念,Windows/macOS/Linux 系统级用户账号之间互不共享 settings.json 和扩展,但同一系统账号下多个项目或开发场景仍需视觉隔离——关键不是创建新用户,而是用工作区设置 + 窗口着色 + 终端独立配色这三招把不同上下文区分开。
workbench.colorCustomizations 必须写在工作区 settings.json 里
想让 A 项目是浅灰背景、B 项目是深蓝背景,不能改用户级 settings.json,否则所有窗口一起变。必须确保:
- 项目根目录有
.vscode/settings.json(不是用户主目录下的那个) - 里面包含完整的
"workbench.colorCustomizations"对象,例如:"workbench.colorCustomizations": { "editor.background": "#f0f0f0", "sideBar.background": "#ffffff", "statusBar.background": "#2c3e50" } - VSCode 右下角状态栏显示「工作区」字样,才表示该配置已生效
- 直接编辑用户设置里的
workbench.colorCustomizations,对工作区无效;反之,工作区配置也不会污染其他项目
terminal.background 和 terminal.foreground 要成对调整
只改终端背景色,大概率文字看不清——因为 VSCode 终端默认文字色由 terminal.foreground 控制,它和 editor.foreground 是两套值。常见错误现象:
- 设了
"terminal.background": "#111",结果命令输出变成灰字糊在深灰上 - PowerShell 启动后背景又变回白底:那是 PowerShell 自身的
$Host.UI.RawUI.BackgroundColor在抢跑,得同步在settings.json里加"terminal.integrated.env.windows"去覆盖 -
terminal.ansiWhite不影响普通文本,只作用于显式 ANSI 白色输出(如\x1b[37m),真正管日常文字的是terminal.foreground
推荐组合:"terminal.foreground": "#e0e0e0" + "terminal.background": "#1a1a1a" + "terminal.ansiBlack": "#222"(基础黑常被用作普通行底色)。
Peacock 插件的颜色不保存到配置文件,靠命令驱动
装完 Peacock 发现标题栏没变色?不是插件坏了,是你没手动触发。它不监听配置变化,只响应命令:
- 按
Ctrl+Shift+P→ 输入Peacock: Change Color→ 回车选色,立刻生效 -
peacock.color配置项只是缓存上次选的值,直接写进settings.json不会染色 - 要让颜色随工作区保留,得设
"peacock.preserveColorOnClose": true,但前提是这个窗口已被你手动染过一次色 - 多根工作区(multi-root workspace)下,整个窗口统一着色,不会按子文件夹分别处理
注意:macOS 上需开启 Window: Title Bar Style 为 custom 才能看到标题栏变色;GNOME 等桌面环境可能只渲染边框。
别碰 theme 文件或 CSS 注入,稳定性差且升级易失效
有人试图复制内置主题目录、改 themes/xxx-color-theme.json,或装 Custom CSS and JS Loader 注入样式——这些方案在 VSCode 更新后极大概率崩:
- VSCode 1.85+ 已禁用未签名的自定义 CSS 加载路径
- theme 目录位于
resources/app/extensions/,每次更新会被覆盖,手动恢复成本高 - 文件树按扩展名染色这类需求,原生不支持;
files.associations只影响语言模式,不控制颜色 - 真正轻量稳定的替代:用 Peacock 区分窗口 + 工作区
workbench.colorTheme切换主题(如一个用Default Dark+,另一个用Quiet Light)
最易被忽略的一点:所有颜色配置修改后,已打开的终端和编辑器标签页不会热更新,必须关闭再新开(Ctrl+Shift+` 关掉终端再重开,或重启窗口)才能看到效果。


















