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

VSCode 不能“合并窗口”,只能把多个独立窗口里的项目收进一个工作区——前提是这些窗口原本就属于同一 VSCode 实例、且没被插件或启动方式隔离。真要持久整合,必须显式保存为 .code-workspace 文件,否则关掉就清空。
怎么判断该不该合并?看进程数,不是看标签页
很多人拖着标签页满屏跑,以为在“合并”,其实只是单窗口内标签爆炸。真正需要合并的,是任务管理器里多个 Code.exe(Windows)或 Electron(macOS)进程:
- 打开任务管理器(
Ctrl+Shift+Esc)或活动监视器,搜Code或Electron - 如果只有 1 个进程 → 别折腾合并,改用编辑器分组 +
Ctrl+K Ctrl+←/→切组 + 关闭预览标签 - 如果有 2 个及以上进程,且每个只开了 1–2 个文件 → 这才是
Window: Merge All Windows的适用场景
Window: Merge All Windows 命令为什么经常失效?
这个命令只对“同用户会话、同安装路径、非临时启动”的窗口有效。常见失效原因:
- 从 Dock / 开始菜单反复点击图标打开的窗口,系统可能分配了新会话 → 改用
code --new-window /path/to/project启动 - 双击
package.json或其他文件直接打开的窗口,常以临时工作区运行 → 此类窗口无法被合并,需先用File → Open Folder…重载 - 插件如旧版 GitLens、Project Manager 可能劫持窗口创建 → 临时禁用插件后重试命令
- 命令必须在你希望“保留为主窗口”的那个窗口中执行,且焦点要落在它上面
真正可靠的合并:手动建 .code-workspace 并添加文件夹
哪怕 Window: Merge All Windows 成功了,也只是把文件标签搬过去,不等于多根工作区。要让调试、终端、设置都按预期工作,必须走标准流程:
- 在任一窗口中执行
File → Save Workspace As…,保存为my-system.code-workspace - 关闭所有窗口,用
code my-system.code-workspace重新打开 - 此时资源管理器顶部应显示多个带名称的根目录标签(如
frontend、backend);若只显示一个文件夹名,说明仍是单根模式 - 右键任意根目录 → 若出现
Remove Folder from Workspace而非Close Folder,才算真正加入工作区
路径写法直接影响协作:绝对路径("path": "/Users/me/project")别人打不开;推荐相对路径("path": "services/auth"),并把 .code-workspace 放在所有项目共同父目录下。
合并后调试和终端还在错的项目里?那是没设活动文件夹
多根工作区没有自动切换的“当前项目”。launch.json、终端初始路径、ESLint 配置,全由“活动文件夹”决定:
- 默认取
folders数组第一个路径作为活动文件夹,不会随你编辑的文件自动变 - 右键资源管理器中某个根目录 →
Set as Active Folder手动切换 - 终端默认在活动文件夹下启动;想为
backend开终端,就先设它为活动文件夹,或右键该文件夹选Open in Integrated Terminal -
launch.json必须放在各自根目录的.vscode/下;VSCode 会读取所有,但只执行活动文件夹下的配置,并应用其cwd
最容易被忽略的是:没点“保存工作区为…”之前,所有添加的文件夹都只是内存里的临时状态,下次启动即丢失。而一旦保存了,.code-workspace 就成了整个开发上下文的唯一事实来源——包括已打开的标签页、终端历史、甚至搜索高亮状态。











