直接修改 files.exclude 即可让匹配路径从资源管理器彻底消失,其语法为相对于工作区根的 glob 模式,如 "**/node_modules": true;需区分 files.exclude(控制侧边栏显示)与 search.exclude(仅影响搜索),且修改后必须重启 VS Code 才生效。

直接改 files.exclude 就行,VS Code 会立刻从资源管理器(左侧文件树)里移除匹配的条目——不是折叠、不是忽略、是真·看不见。
files.exclude 的路径写法必须对,否则整个文件树可能变空
常见错误是把路径当成本地相对路径或正则来写。它其实是 glob 模式,且所有路径都相对于工作区根目录:
-
"node_modules": true只匹配根目录下的node_modules,子目录里的不会被隐藏 -
"**/node_modules": true会递归匹配任意层级的同名文件夹,但容易误杀(比如packages/foo/node_modules) -
"**/dist": true才能隐藏所有dist文件夹;只写"dist": true无效 - 路径中含空格(如
my folder)直接写"my folder": true,不用加引号转义,也不用反斜杠 - 写错成
"**/*": true或"**": true这类宽泛模式,会导致整个资源管理器空白——不是崩溃,是全被过滤了
工作区设置 vs 用户设置:共享配置和覆盖优先级
你改的 files.exclude 生效位置决定了谁能看到这个隐藏规则:
- 用户级设置(全局):在 VS Code 设置 UI 里改,或编辑
$HOME/Library/Application Support/Code/User/settings.json(macOS)等对应路径,影响所有打开的项目 - 工作区级设置(推荐团队协作):在项目根目录下建
.vscode/settings.json,内容为{"files.exclude": {"**/out": true, "**/.git": true}},它会完全覆盖用户级同名配置 - 语言专属排除:支持
"[javascript]": { "files.exclude": { "lib/**": true } },注意语言标识符全小写,[JavaScript]不生效
别和 search.exclude 搞混:一个管侧边栏,一个管搜索框
很多人想“搜的时候跳过 node_modules”,却去动 files.exclude,结果侧边栏没了,还纳闷为啥 Ctrl+Shift+F 没变快:
-
files.exclude控制资源管理器显示 —— 改它,文件夹就从左边彻底消失 -
search.exclude只控制 Ctrl+Shift+F 的搜索范围,不影响侧边栏;它的值默认继承自files.exclude,但反过来不成立 - 临时跳过某些目录搜索?用搜索框右上角的
files to exclude输入框填node_modules/**更安全,不污染配置 - 插件(如 GitLens、ESLint)可能绕过
files.exclude主动读取文件,导致某些视图里仍看到被隐藏的文件夹 —— 关掉扩展再验证是否真生效
改完不生效?重启 VS Code 是最可靠的验证方式
VS Code 不会热重载 files.exclude 规则,也不自动刷新资源管理器视图:
- 修改
.vscode/settings.json后,必须重启 VS Code 才能确保规则完整应用 - 已打开的标签页(比如某个
.class文件)不受影响,仍保留在编辑器里,只是不再出现在左侧文件树中 - 被隐藏的路径下文件依然可编辑、保存、Git 提交 ——
files.exclude不影响文件系统操作,只影响 Explorer 显示 - 动态生成的目录(如 Gradle 的
gradle-app-generated/)得边观察边补规则,没有一劳永逸的通配
真正麻烦的不是加几行配置,而是规则太宽时整个文件树变空,或者被插件悄悄绕过 —— 验证时先关扩展、再重启、最后看左侧是不是真干净了。


















