vscode无直接合并窗口功能,本质是将多进程窗口内容收回到同一实例的编辑器组中;需通过任务管理器确认多进程、执行“window: merge all windows”命令、拖拽至编辑器边缘蓝色框处,并保存为.code-workspace文件固化布局。

VSCode 本身没有“合并窗口”的功能,所谓“多项目窗口合并”,本质是把多个独立进程的 VSCode 窗口内容收回到一个实例中,并通过 .code-workspace 文件固化结构。直接拖拽标签页或点击菜单找“合并”按钮,90% 的情况会失败。
怎么判断真需要合并窗口?
关键不是看标签多不多,而是看系统里有没有多个 VSCode 进程:
- Windows:打开任务管理器 → “进程”页签 → 查找多个
Code.exe - macOS:活动监视器 → 搜索
Electron→ 实例数是否 >1 - 如果只有 1 个进程,但标签栏挤满 → 是标签管理问题,不是窗口问题
- 如果多个进程,且其中几个只开了 1–2 个文件 → 才是该执行
Window: Merge All Windows的场景
Window: Merge All Windows 命令为什么经常不生效?
这个命令只对“同用户会话、同一安装路径启动的窗口”有效,容易卡在三个地方:
- 从 Dock 或开始菜单反复点击图标新开的窗口,常被系统视为新会话 → 改用命令行启动:
code --new-window /path/to/project - 双击
package.json等文件直接打开的窗口,属于“临时工作区”,Window: Merge All Windows对其无效 - 某些插件(如旧版 GitLens)会劫持窗口创建逻辑 → 临时禁用插件后重试,再逐个排查
- 命令必须在你希望保留为主窗口的那个窗口中执行,且焦点要落在它上面
真正可靠的做法:用 .code-workspace 替代“合并”
这不是妥协,而是 VSCode 官方推荐的多项目管理方式。所有“合并”需求,最终都应落在这一步上:
- 关闭所有窗口,用命令行执行:
code --new-window /path/to/parent-dir(确保所有项目都在该父目录下) - 在空窗口中,依次点击 File → Add Folder to Workspace…,加入每个子项目(如
backend、frontend) - 务必执行 File → Save Workspace As…,保存为
my-system.code-workspace—— 不保存就等于没做 - 检查资源管理器顶部是否显示多个带名称的根目录标签;右键任一目录,若出现
Remove Folder from Workspace而非Close Folder,说明已生效 - 路径写法优先用相对路径:
"path": "services/auth"或"path": "../shared-lib",避免绝对路径导致团队协作失败
合并后调试和终端总在错的项目里?
多根工作区没有“全局当前项目”,只有“活动文件夹(Active Folder)”,它决定一切上下文:
- 默认取
folders数组中第一个路径作为活动文件夹,不会随你编辑的文件自动切换 - 右键资源管理器中某个根目录 →
Set as Active Folder,手动切换 - 终端默认在活动文件夹下启动;想为
backend开终端,先设它为活动文件夹,或右键该文件夹选Open in Integrated Terminal -
launch.json必须放在各自根目录的.vscode/下;VSCode 合并配置,但执行时只读取活动文件夹下的launch.json并应用其cwd
最常被忽略的一点:没保存 .code-workspace 文件,所有添加的文件夹、打开的标签页、分组布局、甚至终端历史,关掉窗口就彻底清空。一旦保存,它就成了整个开发上下文的唯一事实来源 —— 不是“备份”,而是“定义”。











