必须将配置写入项目根目录下的.vscode/settings.json,才能确保files.exclude等规则只对当前项目生效;该文件会完全覆盖用户级设置,且需用"**/node_modules": true等glob模式递归匹配,同时注意files.exclude与search.exclude需分别配置。

只对当前项目生效:必须用 .vscode/settings.json
全局设置(用户级 settings.json)会影响所有项目,想让隐藏规则只作用于当前工程,唯一可靠方式是把配置写进项目根目录下的 .vscode/settings.json。VSCode 启动时会优先读取这个文件,并完全覆盖用户设置中同名项。
常见错误是直接在设置 UI 里改 files.exclude,结果发现前端项目里隐藏了 dist,后端项目也跟着消失了——那是因为你改的是用户级配置。
- 手动创建
.vscode文件夹(若不存在),再新建settings.json - 文件必须是完整 JSON 对象,不能只写一个字段;例如不能只写
"files.exclude": {...},而要包裹在{}里 - 保存后资源管理器立刻刷新,无需重启 VSCode
files.exclude 的 glob 写法必须带 **/ 前缀
路径匹配不是相对路径也不是正则,而是 glob 模式,且所有路径都相对于工作区根目录。漏掉 **/ 是最常踩的坑。
比如想隐藏所有层级的 node_modules,写成 "node_modules": true 只能匹配根目录下的那一层;"**/node_modules": true 才真正递归生效。
-
"dist/**"❌ 无效,VSCode 不识别这种非标准开头 -
"**/dist"✅ 隐藏所有dist目录(含子目录里的) -
"**/dist/**"✅ 也能用,但多一次遍历,无实际收益 -
"src/dist"⚠️ 只匹配src下的dist,漏掉packages/foo/dist
区分 files.exclude 和 search.exclude
这两个配置完全独立:files.exclude 控制左侧资源管理器、Ctrl+P 快速打开列表是否显示;search.exclude 只影响 Ctrl+Shift+F 全局搜索范围。配错一个,另一个照常“暴露”你试图隐藏的内容。
常见现象:配了 search.exclude 却发现 node_modules 还在侧边栏,或者反过来——侧边栏干净了,但搜的时候仍疯狂扫描 dist 目录。
- 想彻底隔离?两个配置都得加,内容可以一样,但必须分别写
- 临时跳过某些目录搜索?用搜索框右上角的
files to exclude输入框更安全,不污染配置 - 插件(如 GitLens、ESLint)可能绕过
files.exclude主动读取被隐藏路径,验证时建议先禁用扩展
负向排除(!)要小心顺序和粒度
当你要隐藏大目录但保留其中个别子目录时,得用 ! 语法,但它的行为依赖匹配顺序——VSCode 按字典序逐条匹配,! 规则必须放在通用规则之后,否则会被提前截断。
例如想隐藏全部 node_modules,但保留 @types 类型定义:
-
"node_modules": true→ 先干掉整个目录 -
"!node_modules/@types"→ 再把@types拉回来 - 但
@types/node仍不可见,因为node_modules/@types被拉回后,其子路径不会自动继承可见性;如需子目录也可见,得额外加"!node_modules/@types/**" -
"!@types"❌ 无效,glob 不支持跨层级的负向匹配
精细控制容易翻车的地方就在这儿:看似一行 ! 就能救回某个子目录,实际往往要补好几条才能覆盖真实路径结构。


















