VSCode多项目管理应使用.code-workspace文件而非合并窗口;需显式保存、关闭所有窗口后重新打开,且仅活动文件夹决定调试、终端及扩展配置行为。

工作区不是合并窗口,而是替代窗口
VSCode 没有“合并窗口”这个动作,Window: Merge All Windows 命令只对同进程下启动的窗口有效,且多数场景下它根本不会触发你想要的效果。真正可靠的做法是:关掉所有多余窗口,用一个 .code-workspace 文件重新打开全部项目。这不是妥协,而是 VSCode 的设计逻辑——多根工作区(multi-root workspace)才是官方推荐的多项目统一管理方式。
创建 .code-workspace 文件必须显式保存
很多人点了“添加文件夹到工作区”,以为已经“合并”了,结果一关窗口全丢。关键就卡在没点“保存”。
- 打开任意一个 VSCode 窗口 →
File → Save Workspace As…→ 保存为my-project.code-workspace - 然后编辑该 JSON 文件,在
"folders"数组里添加路径,例如:{"path": "backend"}、{"path": "../shared"} - 路径必须是相对 workspace 文件位置的路径;绝对路径(如
/home/user/project)会导致别人打不开 - 保存后,**必须关闭所有 VSCode 窗口,再双击或用
code my-project.code-workspace重新打开**,否则新加的文件夹只是临时会话
活动文件夹决定调试、终端和配置行为
即使你加了五个项目进工作区,VSCode 也不会自动为你切换上下文。它只认一个“活动文件夹”(Active Folder),而这直接影响:
-
launch.json只读取活动文件夹下的.vscode/launch.json,其他根目录里的配置被忽略 - 集成终端默认在活动文件夹下启动,不是当前编辑的文件所在目录
- ESLint、Prettier 等扩展也优先使用活动文件夹里的配置
- 右键资源管理器中某个根目录 →
Set as Active Folder才能手动切换
拖拽标签页 ≠ 合并窗口,只是移动文件
把一个窗口的标签页拖进另一个窗口,只是把文件打开在目标窗口的新标签页里,不改变项目结构,也不加载对方的 settings.json 或插件上下文。这适合临时看个文件,但不适合长期协作。
- 拖拽目标必须是编辑器区域边缘(出现蓝色高亮框),拖到侧边栏或标题栏无效
- 拖完之后,新文件仍属于原项目上下文,比如你在
frontend窗口里拖了个backend/src/index.ts进来,它不会自动启用 backend 的 TypeScript 配置 - 想真正统一管理,请回到
.code-workspace方式——这才是唯一能固化多项目状态、共享搜索、跨根跳转、统一调试的路径
最容易被忽略的一点:.code-workspace 文件一旦保存,它就成了整个开发会话的唯一事实来源。已打开的标签页、分组布局、甚至终端历史,都会随它一起恢复。但前提是——你得先关掉所有窗口,再用它打开。


















