必须配置files.exclude才能让文件夹在资源管理器中彻底隐藏;search.exclude仅影响搜索结果,与侧边栏无关。两者语法相同但需分别设置,路径须用"**/xxx"等glob模式,且应写入工作区.settings.json中。

直接改 files.exclude 就行,它能让匹配的路径从资源管理器(左侧文件树)里彻底消失,不是折叠、不是忽略,是真·看不见。
为什么只配 search.exclude 没用
search.exclude 和 files.exclude 完全不互通:前者只影响 Ctrl+Shift+F 的搜索结果,对侧边栏毫无作用。很多人改了 search.exclude 发现 node_modules 还在左边,就是误以为“排除”是全局行为。
- 想让文件夹不出现在侧边栏 → 必须配
files.exclude - 想让它也不出现在搜索结果里 → 得额外加一模一样的规则到
search.exclude - 两者语法一致,但必须各自写一遍,没有自动同步
files.exclude 的 glob 路径怎么写才有效
所有路径都相对于工作区根目录,且必须用 glob 模式,不是正则,也不是本地相对路径。常见失效原因基本都出在这儿:
-
"node_modules": true→ 只隐藏根目录下的node_modules,子目录里的(如packages/foo/node_modules)完全不管 -
"**/node_modules": true→ 正确,递归匹配任意层级的同名文件夹 -
"dist": true→ 无效,src/dist或build/dist都不会被隐藏 -
"**/dist": true→ 正确,覆盖所有位置 -
"**/logs/**": true→ 隐藏所有logs目录及其全部子内容 -
"**/*": true或"**": true→ 危险!整个资源管理器会变空
如何保留某个子目录(比如 @types)
用 ! 做负向排除,但顺序关键:例外规则必须写在通用规则之后,否则会被提前过滤掉。
- 错误写法:
"!node_modules/@types": true, "node_modules": true→@types仍被吃掉 - 正确写法:
"node_modules": true, "!node_modules/@types": true, "!node_modules/@types/**": true - VS Code 1.85+ 支持更宽松的
!**/node_modules/@types/**,老版本建议用绝对路径模式 - 注意:
!规则只对显式匹配的路径生效,不会自动递归放行其子目录,所以/**很重要
配置该写在哪儿、改完为啥没立刻生效
优先级是:工作区设置(.vscode/settings.json) > 用户设置。多根工作区下,每个文件夹有自己的 .vscode,规则互不影响。
- 团队项目推荐写进项目根目录的
.vscode/settings.json,避免污染全局 - 修改后不用重启 VS Code,但已展开的父文件夹可能需要手动折叠再展开一次才刷新显示
- 如果发现没生效,先确认右下角状态栏显示的是「工作区设置」还是「用户设置」
- 插件(如 GitLens、ESLint)可能绕过
files.exclude主动读取文件,导致某些视图里仍看到被隐藏的路径——这不是配置错了,是插件行为
真正容易被忽略的点是:路径匹配以斜杠为界,"build/*" 不会匹配 build 文件夹本身,要写成 "build": true;而通配符 ** 必须带斜杠使用,"**dist" 是无效的,得是 "**/dist"。


















