vs code文件嵌套需先确认版本≥1.67并启用explorer.filenesting.enabled,规则须用${capture}精确匹配同目录文件,自定义patterns会覆盖内置默认规则如package-lock.json。

文件嵌套功能没生效?先确认 VS Code 版本和基础开关
VS Code 的 explorer.fileNesting.enabled 功能从 1.67 版本起才正式稳定支持,低于该版本(如 1.64 的实验版)可能行为异常或完全不可用。如果你看到嵌套项不出现、点了没反应,第一件事不是改规则,而是检查版本:Help → About 看是否 ≥ 1.67。
确认版本后,在设置中搜索 file nesting,确保以下两项已启用:
-
explorer.fileNesting.enabled必须为 true -
explorer.fileNesting.expand默认为 false(即嵌套项默认收起),若想一打开就展开,可设为 true,但多数人更倾向手动点开——避免初始加载卡顿
patterns 规则写不对?重点看匹配逻辑和通配符语法
explorer.fileNesting.patterns 是核心,但它的匹配不是“模糊查找”,而是基于文件名前缀的精确捕获。比如你写 "*.ts": "*.spec.ts",VS Code 并不会把 utils.spec.ts 嵌套进 utils.ts —— 因为 *.spec.ts 不是合法的捕获模式,它无法关联到主文件名。
正确写法必须用 ${capture} 或 $(capture)(两者等价)来复用主文件名:
-
"*.ts": "${capture}.spec.ts, ${capture}.test.ts"→ 匹配api.ts下挂api.spec.ts -
"package.json": "README.md, LICENSE, .npmrc"→ 手动指定,无需捕获 -
"*.config.*": "${capture}.env"→ 支持多段扩展名,匹配vite.config.ts下挂vite.env
注意:* 在 value 侧仅作通配符(如 *.d.ts),不能用于动态命名;所有路径都是相对于工作区根目录,不支持 ../ 或绝对路径。
嵌套了但显示错位?检查文件是否被其他设置干扰
文件嵌套视觉上“挂歪了”(比如 index.html 下出现了 package.json),大概率是 patterns 规则冲突或覆盖。VS Code 按照 rules 的字典序(key 字母顺序)逐条匹配,一旦某条规则命中,就不会再试后面的。
常见干扰点:
- 你写了
"*": "README.md"—— 这会把所有文件都尝试挂一个 README,必须删掉 -
"*.js": "${capture}.config.js"和"vite.config.js": ".env"同时存在,而vite.config.js先被*.js规则捕获,导致.env永远不生效 - 工作区
settings.json和用户全局设置里都有patterns,后者会被前者完全覆盖(不是合并),调试时建议只在一个地方维护
为什么 package.json 下没显示 lock 文件?默认规则已被覆盖
VS Code 内置了一套默认嵌套规则(包括 package.json 自动挂 package-lock.json、yarn.lock、pnpm-lock.yaml),但这个默认行为**只在 patterns 完全未配置时生效**。一旦你在任何层级(用户/工作区)设置了 explorer.fileNesting.patterns,内置规则就会被清空,必须手动补全。
所以如果你自定义了 patterns 却发现 lock 文件不见了,不是 bug,是设计如此。补上即可:
{"package.json": "README.md, LICENSE, .npmrc, package-lock.json, yarn.lock, pnpm-lock.yaml"}
另外注意:VS Code 不识别 shrinkwrap.yaml 或 bun.lockb,这些需手动添加。
最易忽略的一点:嵌套只作用于资源管理器的视觉结构,不影响文件系统、Git 提交、构建流程或任何 CLI 工具——它纯属 UI 层虚拟分组。别指望靠它“隐藏”敏感配置文件,也别以为折叠后它们就不存在了。











