正确创建 multi-root 工作区需先通过“将文件夹添加到工作区…”逐个添加,再“另存工作区为…”生成 .code-workspace 文件;该文件应置于所有项目共同父目录下,路径须用相对路径且与保存位置强绑定。

怎么创建 multi-root 工作区文件(.code-workspace)
VSCode 的多根工作区不是靠“打开多个文件夹”实现的,而是必须显式创建一个 .code-workspace 文件来声明哪些文件夹参与。直接拖拽多个文件夹进窗口,只会触发“添加文件夹到工作区”——但这个操作不持久,关掉窗口就丢,也不支持跨项目配置共享。
正确做法是:点击菜单 文件 → 将文件夹添加到工作区…,选中第一个项目目录;再重复添加第二个、第三个;最后点 文件 → 另存工作区为…,保存为 my-projects.code-workspace。
- 保存后,双击该
.code-workspace文件就能一次性加载全部根目录 - 文件本质是 JSON,可手动编辑——比如改
"folders"数组里的路径,或加"settings"块统一控制缩进、ESLint 路径等 - 别把
.code-workspace放在某个子项目里,建议放在所有项目的共同父级目录下,避免路径写成相对路径后迁移失败
为什么 workspace settings 有时不生效
多根工作区里,设置优先级是:用户设置 < 工作区设置 < 单文件夹设置。而很多人误以为在 .code-workspace 里写的 "settings" 会自动覆盖所有子文件夹——其实不会,除非你在每个 folders 条目里显式指定 "path" 并配好相对路径,否则 VSCode 默认只对“工作区根”应用这些设置。
- 检查是否在
.code-workspace的顶层写了"settings",而不是嵌套在某个folders下 - 如果某个子项目需要独立规则(比如前端用 2 空格缩进,后端用 4),就在它自己的
.vscode/settings.json里覆盖,别全堆到工作区层 -
"editor.tabSize"这类设置在工作区级生效没问题,但像"eslint.workingDirectories"必须按子项目路径分别配置,否则 ESLint 找不到对应package.json
终端默认工作目录为什么总跳错
多根工作区下,VSCode 新开终端默认进入的是“当前活动文件所在文件夹”,不是工作区根,也不是你期望的主项目目录。这会导致运行 npm run dev 或 python main.py 时提示“找不到模块”或“no such file”。
- 右键终端标签页 → 在特定文件夹中创建终端,手动选目标子项目目录
- 或者在
.code-workspace中加"terminal.integrated.defaultProfile.linux"(或osx/windows)并配合"terminal.integrated.profiles.*"指定启动路径 - 更简单的方法:在资源管理器里右键某个子文件夹 → 在集成终端中打开,这样终端自动 cd 进去
Git 面板只显示一个仓库的变更
VSCode 的源代码管理视图默认只展示“当前打开文件所属的 Git 仓库”的状态。如果你在 A 项目里编辑,B 项目的修改就不会出现在 Git 面板顶部——这不是 bug,是设计逻辑:它不主动轮询所有根目录下的 .git。
- 点击 Git 面板右上角的
…→ 切换仓库,可手动切换查看其他根目录下的 Git 状态 - 想同时看多个仓库?装插件
GitLens,它的 Repositories 视图能列出全部根目录下的 Git 仓库及其未提交变更 - 别依赖 Git 面板做跨项目批量提交——每个仓库仍需单独 commit/push,多根工作区不等于合并仓库
最常被忽略的一点:.code-workspace 文件里的路径如果是相对路径,移动整个工作区目录后会全部失效;绝对路径又不利于协作。稳妥做法是用 ${workspaceFolderBasename} 这类变量替代硬编码路径,但注意它们只在某些字段(如 launch.json)里有效,在 .code-workspace 的 folders.path 中不支持——这里只能老老实实写相对路径,并接受它和保存位置强绑定。


















