把文件夹升级成 工作区
前四天我们把编辑器内部的速度练起来了。今天开始进入「工作区与终端」阶段: 不再把 VSCode 当成一个单纯的文件夹浏览器,而是把它整理成项目控制台。 你会学会 .code-workspace、多根目录、Explorer 整理、file nesting、Breadcrumbs 与 Workspace Trust。
思维导图
今天的心智模型
打开一个目录
最普通的模式。VSCode 以这个目录为根,读取里面的 .vscode/settings.json、任务、调试配置。适合单仓库、单服务。
保存一个项目视图
.code-workspace 不是代码目录,而是 VSCode 的项目视图文件。它能保存多个根目录、工作区设置、推荐扩展、任务配置。
把多个根放到一起
适合前端 + 后端 + 文档 + 基础设施分在不同目录或仓库的项目。一个窗口里看到多个 root,搜索、终端、任务都能带上上下文。
Explorer 不只是文件树
| 区域 | 用途 | 建议用法 |
|---|---|---|
| Explorer | 项目文件树。创建、重命名、移动、删除文件。 | 尽量把长期不看的生成物隐藏或折叠,让源码目录露出来。 |
| Open Editors | 当前窗口打开过的文件列表。 | 适合短期上下文切换。文件一多就清理,否则会变成第二个杂乱文件树。 |
| Outline | 当前文件的符号结构:函数、类、变量、标题。 | 读长文件时打开。它比滚动更稳定,也能帮助你判断文件是否过大。 |
| Timeline | 当前文件的本地历史、Git 历史、保存节点。 | 小规模误改时非常有用。大型回滚仍以 Git 为准。 |
| Breadcrumbs | 编辑器顶部的路径 + 符号导航。 | 在深目录、长文件里快速确认「我在哪」,也可直接跳到父目录或上层符号。 |
高频入口
| 动作 | macOS | Windows / Linux | 说明 |
|---|---|---|---|
| 打开 Explorer | ⌘⇧E | Ctrl Shift E | Activity Bar 的文件视图入口。 |
| 快速打开文件 | ⌘P | Ctrl P | 文件多时优先用它,不要在树里慢慢翻。 |
| 在 Explorer 中显示当前文件 | ⌘⇧P → Reveal Active File in Explorer | Ctrl Shift P → Reveal Active File in Explorer | 读代码迷路时,一键回到文件树位置。 |
| 重命名文件 | F2 | F2 | 在 Explorer 中选中文件后触发。移动文件建议用拖拽或剪切粘贴。 |
| 折叠所有文件夹 | Explorer 工具栏 Collapse Folders | Explorer 工具栏 Collapse Folders | 文件树展开过多时快速清场。 |
| 聚焦 Breadcrumbs | ⌘⇧. | Ctrl Shift . | 用键盘进入顶部路径 / 符号导航。 |
| 保存工作区 | ⌘⇧P → Save Workspace As | Ctrl Shift P → Save Workspace As | 把当前窗口的多根目录保存成 .code-workspace。 |
.code-workspace 文件长什么样
它本质是一个 JSON 文件。你可以用菜单生成,也可以手写。 下面是一份适合前后端分离项目的最小可用模板。
{
"folders": [
{ "name": "web", "path": "packages/web" },
{ "name": "api", "path": "packages/api" },
{ "name": "docs", "path": "docs" }
],
"settings": {
"files.exclude": {
"**/.DS_Store": true,
"**/dist": true,
"**/coverage": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/coverage": true
},
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"package.json": "package-lock.json,yarn.lock,pnpm-lock.yaml,bun.lockb",
"tsconfig.json": "tsconfig.*.json",
"*.ts": "$(capture).test.ts,$(capture).spec.ts,$(capture).d.ts",
"*.tsx": "$(capture).test.tsx,$(capture).spec.tsx"
}
},
"extensions": {
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
]
}
}定义根目录
path 可以是相对路径或绝对路径。name 是 Explorer 里显示的名字,建议用短名。
保存项目视图偏好
适合放排除规则、file nesting、格式化策略这类工作区级设置。不要把个人字体、主题放进来。
推荐扩展
用 recommendations 引导团队安装必要扩展。它不会强制安装,但会在打开项目时提示。
Multi-root 解决什么问题
一个仓库,多个子项目
packages/web/
packages/api/
packages/shared/
docs/
多个仓库,一个业务场景
~/work/order-api/
~/work/order-deploy/
~/work/order-docs/
源码 + 笔记 + 实验
~/lab/notes/
~/lab/scratch/
~/lab/references/
客户项目隔离
client-a-api/
client-a-infra/
client-a-runbook/
File Nesting: 把噪音收起来
File nesting 不是删除文件,而是在 Explorer 里把相关文件折到主文件下面。 它特别适合 lockfile、测试文件、类型声明、source map、构建产物。
| 主文件 | 折叠规则 | 效果 |
|---|---|---|
package.json | package-lock.json,yarn.lock,pnpm-lock.yaml,bun.lockb | 锁文件跟随 package.json,根目录清爽很多。 |
tsconfig.json | tsconfig.*.json | 把 tsconfig.build.json、tsconfig.node.json 收在一起。 |
*.ts | $(capture).test.ts,$(capture).spec.ts,$(capture).d.ts | 测试与类型声明跟随源码文件。 |
*.js | $(capture).js.map,$(capture).min.js | source map 与压缩产物不再冲到主视图。 |
*.css | $(capture).module.css,$(capture).css.map | 样式相关文件可以按主样式收纳。 |
Breadcrumbs: 读代码时不迷路
路径导航
当你从 ⌘P 跳进一个深层文件,第一眼先看 Breadcrumb。它告诉你模块归属,也能快速跳回同级目录。
符号导航
在长文件中,符号 Breadcrumb 能显示当前函数 / 类 / 方法。比靠滚动条猜位置可靠得多。
Workspace Trust: 先判断能不能信任
可信项目
你自己的项目、公司内部仓库、明确来源的开源仓库。可以开启任务、调试、扩展自动运行等完整能力。
受限模式
下载的陌生代码、面试题压缩包、临时分析的可疑仓库。先用 Restricted Mode 看源码,不要立刻允许脚本和扩展运行。
信任的是目录
VSCode 的信任通常绑定目录。把不同来源的代码分开存放,不要把陌生仓库扔进一个已经信任的大目录里。
怎么选择工作区形态
项目单一、结构清晰
例如一个普通前端应用、一个 Go 服务、一个博客仓库。直接 Open Folder 足够,再配合项目内 .vscode/settings.json。
每次都要打开一组目录
如果你反复打开 web + api + docs,就该保存成 .code-workspace。一次配置,之后双击恢复。
多个根各有独立上下文
不同仓库、不同语言栈、不同 Git 根。Multi-root 能把它们放在同一个窗口,但不强行合并它们。
不要把一切都塞进一个工作区
过大的 workspace 会让搜索、Explorer、终端上下文都变重。一个工作区最好对应一个真实任务场景。
动手实验
Lab 1 — 搭一个多根工作区
目标:创建一个模拟前后端项目,并保存成 learning.code-workspace。
vscode-day08-lab/
packages/
web/
src/
api/
src/
docs/
infra/- 创建上面的目录结构,用 VSCode 打开
vscode-day08-lab - 执行
File: Add Folder to Workspace,把packages/web、packages/api、docs作为根加入 - 执行
Workspaces: Save Workspace As,保存为learning.code-workspace - 关闭窗口后双击
learning.code-workspace,确认多根目录被恢复 - 观察 Explorer 顶层是否显示 web / api / docs 三个 root
Lab 2 — 配置 file nesting
目标:把 lockfile、测试文件、类型文件折叠到主文件下面。
{
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"package.json": "package-lock.json,yarn.lock,pnpm-lock.yaml",
"*.ts": "$(capture).test.ts,$(capture).spec.ts,$(capture).d.ts",
"*.tsx": "$(capture).test.tsx,$(capture).spec.tsx"
}
}- 在 workspace 的
settings中加入上面配置 - 创建
Button.tsx、Button.test.tsx、Button.spec.tsx - 创建
package.json与pnpm-lock.yaml - 回到 Explorer,观察测试文件和 lockfile 是否被折叠
- 把
explorer.fileNesting.expand改成true,对比默认展开效果
Lab 3 — 用 Breadcrumbs 读一个深层文件
目标:练习不依赖文件树,只用 Breadcrumbs 和快速打开定位。
- 在
packages/web/src/pages/settings/SettingsPage.tsx写几个函数:SettingsPage、handleSubmit、validateForm - 用 ⌘P(Win: Ctrl P)直接打开
SettingsPage.tsx - 看编辑器顶部 Breadcrumb,确认当前路径和当前函数
- 按 ⌘⇧.(Win: Ctrl Shift .)聚焦 Breadcrumbs
- 用键盘选择上层目录或函数名跳转,体验路径导航与符号导航的区别
三个 Lab 的纵深
Lab 1 解决项目入口,Lab 2 解决视觉噪音,Lab 3 解决定位感。工作区管理不是为了好看,是为了减少每次进入项目时的认知摩擦。
附加挑战
把你当前最常打开的 2-4 个项目目录整理成一个真实 .code-workspace,并加入 file nesting、search.exclude、extensions.recommendations。
常见疑问
Q1
.code-workspace 文件要不要提交到 Git?
+
看它是否代表团队约定。如果里面是项目结构、推荐扩展、排除规则、任务配置,可以提交。如果里面是你的本机绝对路径、个人主题、个人字体、临时目录,不要提交。团队共享 workspace 最好使用相对路径,并把个人偏好留在 User Settings。
Q2 Multi-root 和 monorepo 是一回事吗? +
不是。Monorepo 是代码组织方式:多个项目放在一个仓库。Multi-root 是 VSCode 窗口组织方式:一个窗口里放多个根目录。它可以用于 monorepo,也可以用于多个独立仓库。简单说,monorepo 发生在 Git 和文件系统层,Multi-root 发生在编辑器视图层。
Q3
files.exclude、search.exclude、file nesting 有什么区别?
+
files.exclude 是从 Explorer 里隐藏,眼不见;search.exclude 是搜索时跳过,不影响 Explorer;file nesting 是文件仍可见,只是折到主文件下面。三者可以配合:生成物用 exclude 隐藏,源码关联文件用 nesting 收纳,大目录用 search.exclude 降低搜索噪音。
Q4 为什么不建议把所有仓库都放进一个超大 workspace? +
因为工作区越大,你的搜索范围、文件树、符号索引、终端上下文都会变重。更糟的是它会稀释任务边界:你很难判断当前窗口到底服务哪个目标。一个好的 workspace 应该围绕一个真实工作场景,比如「订单系统开发」或「博客写作」,而不是「我的所有代码」。
Q5 Workspace Trust 每次弹出来很烦,可以直接全信任吗? +
不建议。信任后,项目里的任务、调试配置、部分扩展能力可能运行代码。你自己的项目和可信来源可以信任;陌生压缩包、网上下载的仓库、临时排查的代码先保持 Restricted Mode。更好的习惯是按来源分目录:可信工作目录长期信任,临时下载目录默认不信任。
复盘问题
Open Folder和打开.code-workspace的本质区别是什么?folders、settings、extensions.recommendations在 workspace 文件里分别负责什么?files.exclude、search.exclude、explorer.fileNesting.patterns应该分别用于什么场景?- Breadcrumbs 中路径导航和符号导航分别解决什么问题?
- 什么时候应该信任一个 workspace?什么时候应该保持 Restricted Mode?
今日检查清单
- 能区分 Folder、Workspace、Multi-root 三个概念
- 能创建并重新打开一个
.code-workspace文件 - 知道 workspace 文件中的
folders、settings、extensions各自用途 - 能为项目配置
files.exclude与search.exclude - 能写出至少 3 条 file nesting pattern
- 能用 ⌘P / Ctrl P 快速打开文件,而不是只靠 Explorer 翻目录
- 能用 Breadcrumbs 判断当前路径和当前函数位置
- 理解 Workspace Trust 的安全意义,不会盲目信任陌生代码
推荐阅读
VSCode Multi-root Workspaces
官方多根工作区文档。重点看 workspace 文件结构、root 命名、跨根搜索与设置作用域。
VSCode Workspace Trust
官方工作区信任模型说明。理解 Restricted Mode 下哪些能力会被限制。
VSCode File Nesting
查 file nesting pattern 语法和常见配置。重点理解 $(capture) 如何匹配同名文件。
Day 09 预告
集成终端深入
今天我们把项目视图整理好了。明天继续往「项目控制台」推进: 终端 Profile、多个 terminal、split、working directory、shell integration、点击日志路径跳源码。 学完后,你会少开很多独立终端窗口。