vscode没有合并窗口功能,本质是将多个进程窗口整合为单进程多根工作区;判断是否需合并应看进程数而非标签数,windows查code.exe、macos查electron实例;可靠方式是关闭所有窗口后用code --new-window启动主窗口,添加文件夹并立即save workspace as为.code-workspace文件,且须设active folder以确保终端、调试等正确运行。

VSCode 没有“合并窗口”的功能,所谓多个项目窗口合并,本质是把多个独立进程的窗口内容收回到一个 VSCode 实例中,并用多根工作区(.code-workspace)固化结构。直接拖拽窗口或按快捷键不会生效,必须走工作区路径。
怎么判断该不该合并?看进程数,不是看标签数
很多人误以为标签栏挤满就要“合并窗口”,其实真正需要合并的是多个 Code.exe(Windows)或 Electron(macOS)进程:
- Windows:按
Ctrl+Shift+Esc打开任务管理器 → “进程”页签 → 数一数有几个Code.exe - macOS:打开“活动监视器” → 搜索
Electron→ 看实例数是否 > 1 - 只有 1 个进程但开了 30 个文件?那是标签管理问题,不是窗口问题,别折腾合并
- 有 3 个进程,每个只开了 1–2 个文件?这才是真要合并的场景
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/common-parent(比如所有项目都在~/projects/下) - 依次通过
File → Add Folder to Workspace…加入各项目目录 -
必须立刻执行
File → Save Workspace As…,存为my-system.code-workspace - 编辑该 JSON 文件,确认
"folders"是相对路径(如{"path": "backend"}),不要写绝对路径 - 之后全部用
code my-system.code-workspace打开,而非单独打开文件夹
合并后调试/终端总在错的项目里?因为没设 Active Folder
多根工作区里没有自动切换的“当前项目”,只有手动指定的“活动文件夹”:
- 资源管理器顶部显示多个根目录,但默认只以
folders[0]为Active Folder - 右键任一项目根目录 →
Set as Active Folder,才能让终端、launch.json、ESLint 配置正确加载 - 终端默认在活动文件夹下启动;想为
frontend启动终端,就先把它设为 Active Folder -
launch.json必须放在各自根目录的.vscode/下,VSCode 只读取活动文件夹下的配置并应用其cwd
最容易被忽略的点:没保存 .code-workspace 文件前的所有操作都是临时的,关掉窗口就清空。一旦保存,它就成了整个开发上下文的唯一事实来源——包括已打开的标签页、终端历史、甚至搜索高亮状态。











