VSCode不支持单窗口内切换不同项目根目录,推荐用多窗口或多根工作区实现多项目管理:多窗口通过code --new-window命令启动,进程隔离;多根工作区通过.my-projects.code-workspace文件聚合多个项目,共享设置但支持跨项目操作。

VSCode 本身不支持传统意义上的“多项目窗口”(即一个窗口里开多个根工作区并完全隔离),但能通过多个独立窗口 + 多根工作区(Multi-root Workspace)两种方式实现你想要的效果——关键看你要的是“物理隔离编辑环境”,还是“逻辑聚合管理多个项目”。
用 code --new-window 启动多个独立窗口
这是最直接对应“同时在不同窗口编辑多项目”的做法。每个窗口彼此进程隔离,扩展、设置、终端、调试会话互不影响。
- 命令行执行:
code --new-window /path/to/project-a和code --new-window /path/to/project-b,会分别打开两个窗口,各自加载对应文件夹 - 如果已打开一个窗口,按
Ctrl+Shift+N(Windows/Linux)或Cmd+Shift+N(macOS)可新建空白窗口,再用File → Open Folder…加载另一个项目 - ⚠️ 注意:不要用
File → Add Folder to Workspace…,那是往当前工作区加目录,不是开新窗口 - macOS 上从 Dock 点击 VSCode 图标默认复用已有窗口,必须右键图标选 “New Window”,或用命令行启动才可靠
用多根工作区(.code-workspace)合并多个项目到一个窗口
适合需要跨项目跳转、统一搜索、共享终端或调试多个服务的场景。但所有项目共用同一套设置(除非用 settings.json 中的 "workbench.settings.applyToAllProfiles" 控制)。
- 操作路径:
File → Save Workspace As…,保存为my-projects.code-workspace - 然后在该 workspace 文件中手动编辑 JSON,添加多个
folders条目,例如:
{
"folders": [
{ "path": "backend" },
{ "path": "frontend" },
{ "path": "../shared-utils" }
],
"settings": {
"editor.tabSize": 2
}
}
- 保存后重新用 VSCode 打开这个
.code-workspace文件,就能在一个窗口里看到多个根目录 - ⚠️ 坑:路径是相对于 workspace 文件位置的相对路径;绝对路径需加
"/"前缀(如"/Users/name/project"),但跨平台协作时慎用 - 扩展启用状态以窗口为单位,但某些扩展(如 ESLint、Prettier)会按文件路径自动匹配对应配置,实际影响不大
为什么不能“一个窗口里随意切换不同项目根目录”?
VSCode 的设计哲学是“一个窗口 = 一个工作区上下文”。它没有“关闭当前文件夹、再打开另一个”的菜单项(File → Close Folder 只清空资源管理器,不重置语言服务、任务、调试配置等)。强行用 Open Folder… 替换当前根目录,会导致:
- 之前项目的
launch.json、tasks.json全部丢失 - 已打开的未保存文件标签页还在,但语法高亮/智能提示可能错乱(尤其当两个项目用不同语言服务器时)
- 终端历史、正在运行的进程不会自动清理
所以官方明确不推荐这种“热切换”,而是引导你用多窗口或 .code-workspace。
容易被忽略的细节
多窗口之间,Ctrl+P(快速打开)默认只搜当前窗口打开的文件;想全局搜索所有已打开窗口的文件,得装扩展如 Project Manager 或用 Ctrl+Shift+F 配合多文件夹搜索——但后者只对当前工作区生效。真正要跨窗口项目联动,还是得回到 .code-workspace 方案。











