VSCode通过.code-workspace文件实现多根工作区,支持单窗口并行管理多个独立项目路径,共享扩展但隔离设置;禁用拖拽文件夹方式,须显式声明各项目为根路径。

VSCode 本身不支持“多项目并行打开”这种传统 IDE 的工作区概念,Ctrl+P 或 Cmd+P 搜索文件时默认只在当前打开的文件夹(即“根文件夹”)内查找。所谓“管理多个项目”,本质是正确使用 Workspace(工作区)和 Multi-root workspace(多根工作区)机制。
用 .code-workspace 文件创建多根工作区
单个 VSCode 窗口只能打开一个“工作区”,但这个工作区可以包含多个独立的项目路径(即多个根文件夹)。关键不是反复关闭/打开文件夹,而是把常用项目路径写进一个 JSON 文件里。
- 新建一个空文件,命名为
my-projects.code-workspace - 内容格式必须严格符合 VSCode 工作区 Schema,例如:
{
"folders": [
{
"path": "../backend"
},
{
"path": "../frontend"
},
{
"path": "../shared-utils"
}
],
"settings": {
"editor.tabSize": 2,
"files.exclude": { "**/node_modules": true }
}
}
保存后双击打开,或用命令行 code my-projects.code-workspace 启动 —— 此时左侧资源管理器会显示三个并列的根文件夹,且共享同一套 settings 和已启用扩展。
切换工作区不要靠“重新打开文件夹”
很多人习惯用 File → Open Folder... 切换项目,这会导致前一个窗口被关闭或新窗口弹出,丢失已打开的编辑器标签、终端、调试状态等上下文。真正高效的方式是复用已有窗口 + 快速加载不同工作区文件。
- 用快捷键
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Workspaces: Open Workspace from File... - 选中另一个
.code-workspace文件,VSCode 会提示是否“重用当前窗口”,选“是”即可无缝切换 - 已打开的工作区会保留在
File → Recent Workspaces菜单里,可快速回溯
每个工作区的配置互不影响
.code-workspace 文件里的 settings 是该工作区独占的,不会覆盖用户级 settings.json,也不会影响其他工作区。这点特别适合混合技术栈场景:
-
前端项目需要
"eslint.enable": true,后端项目想关掉 ESLint?分别在各自.code-workspace中设置即可 - 某工作区要默认开启
terminal.integrated.defaultProfile.linux,另一工作区指定zsh?没问题,各自定义 - 注意:扩展启用状态(如 Prettier、Python)是全局的,但它们的行为受工作区
settings控制
别把项目文件夹直接拖进 VSCode 窗口
这是最常踩的坑:把多个项目文件夹直接拖进同一个 VSCode 窗口,看似都展开了,但实际只有第一个是“根文件夹”,其余只是普通子目录 —— 它们无法拥有独立的 settings、无法触发各自 .vscode/tasks.json、也无法被 Ctrl+P 全局索引到(除非开启 search.followSymlinks 并手动加排除)。
真正的多项目协作,必须通过 .code-workspace 显式声明每个 path,否则 VSCode 不认为那是“根”。哪怕只是临时对比两个项目,也建议花 30 秒建个最小 workspace 文件,而不是靠视觉折叠来“假装多根”。










