vscode不支持窗口合并,只能通过手动创建.code-workspace文件实现多根工作区;需关闭所有窗口后重新打开该文件,才能启用共享配置与扩展的统一管理。

VSCode没有“窗口合并”功能,只有工作区聚合
VSCode 从不真正“合并窗口”,所谓“合并”其实是把多个独立窗口里的项目,手动收编进一个 .code-workspace 文件,然后在一个窗口里重新加载。如果你刚拖拽一个 VSCode 窗口到另一个窗口的标签栏上,发现没反应、或只多了一个 Tab —— 这不是失败,是设计如此:VSCode 不支持跨进程拖入文件夹。
常见误操作包括:
- 把窗口 A 的资源管理器里某个文件夹拖进窗口 B 的侧边栏 → 无效果(VSCode 忽略跨窗口拖拽)
- 在窗口 B 中执行
File → Add Folder to Workspace…→ 实际只是往当前工作区加根目录,不是“合并窗口” - 双击另一个项目的
.code-workspace文件 → 默认会在新窗口打开,而非合并进当前窗口(除非你禁用了workbench.preferredNewWindowMode)
想统一管理多个项目?必须手动创建 .code-workspace 文件
这是唯一可靠的方式。不能靠快捷键自动完成,也不能靠插件“智能识别”。你得显式声明哪些路径属于这个工作区。
操作要点:
- 在任意空文件夹中新建文件,命名为
my-team.code-workspace - 编辑内容,严格使用 JSON 格式,
folders数组里写相对路径优先(如"./frontend"),避免同事拉代码后路径失效 - 绝对路径需注意跨平台:Windows 用双反斜杠
"C:\project\backend"或正斜杠"C:/project/backend";macOS/Linux 用"/Users/name/project" - 保存后,**必须关闭所有 VSCode 窗口**,再双击该文件,或终端运行
code my-team.code-workspace—— 否则旧窗口不会自动重载为多根模式
验证是否生效:左下角状态栏显示 [Workspace],且资源管理器顶部列出多个根文件夹名(不止一个折叠图标)。
合并后工作区的设置和扩展行为会变
多根工作区不是“多个项目叠加”,而是共享同一套运行时上下文。这意味着:
-
.vscode/settings.json是全局生效的,无法为frontend单独设editor.tabSize: 2,为backend设editor.tabSize: 4—— 所有根目录共用同一份配置 - 已启用的扩展(如 ESLint、Prettier)对所有根目录都起作用;但扩展自身的配置(如
eslint.enable)可按文件夹路径条件启用,需在settings.json中用"[javascript]": { ... }或"files.associations"细粒度控制 - 终端历史、调试断点、未保存的文件状态,全部绑定到当前窗口进程;切换工作区 = 重启整个上下文,旧终端会关闭,断点丢失
别依赖“最近打开”列表来切换工作区
Ctrl+R / Cmd+R 列出的是“最近打开过的路径”,不区分单文件夹还是工作区文件。点错一个单文件夹路径,当前多根工作区就立刻被清空,状态栏 [Workspace] 消失 —— 这不是 bug,是 VSCode 主动退出多根模式。
更稳妥的做法:
- 用
Ctrl+P输入Recent:(注意冒号),它强制只匹配.code-workspace文件,过滤精准 - 给常用工作区文件加个桌面快捷方式,或在终端 alias 里定义:
alias fe='code ~/projects/fe.code-workspace' - 如果频繁切换,考虑放弃多根工作区,改用多个独立窗口 +
code --new-window启动,每个窗口专注一个项目,互不干扰
最易被忽略的一点:工作区文件本身不保存你当前打开的文件、编辑器分组布局、终端内容 —— 它只存 folders 和 settings。每次打开,都是干净启动。需要保留布局,得靠第三方扩展(如 Project Manager)或手动记笔记。











