files.exclude 是唯一能真正隐藏资源管理器中文件树条目的配置项,它通过 glob 模式匹配路径实现视觉隐藏,不影响文件实际存在、编辑、Git 提交或插件读取,且支持工作区优先、热更新与负向排除。

files.exclude 是唯一能真正隐藏文件树中条目的配置项
想让某个文件或文件夹在左侧资源管理器(俗称“代码树形图”)里彻底消失,必须改 files.exclude,不是 search.exclude,也不是系统级隐藏属性。后者只影响搜索结果,对侧边栏毫无作用——很多人配了 search.exclude 发现文件还在,就是卡在这儿。
它生效后,被匹配的路径不会出现在资源管理器、Ctrl+P 快速打开列表、新建/保存弹窗路径提示中。但文件本身仍可编辑、Git 提交、被插件读取——只是“视觉上移除”。
-
"**/dist"才能隐藏所有层级的dist文件夹;只写"dist"只匹配项目根目录下的那个 -
".DS_Store"可直接隐藏 macOS 系统生成的隐藏文件,不用加引号或转义空格 - 路径是相对于工作区根目录的 glob 模式,不是正则,也不接受本地相对路径写法
- 写错成
"**/*"或"**"会导致整个资源管理器变空——不是崩溃,是全被过滤掉了
工作区设置优先于用户设置,且无需重启 VS Code
推荐把规则写进项目根目录下的 .vscode/settings.json,而不是全局用户设置。这样既避免污染其他项目,又确保团队成员开箱即用。
示例结构必须是完整 JSON 对象:
{
"files.exclude": {
"**/node_modules": true,
"**/build": true,
"**/coverage": true
}
}
保存后资源管理器会立刻刷新,不用重启 VS Code(2026 年起已支持热更新)。但如果你之前改过却没生效,先检查是否误写了 search.exclude,或路径漏了 **/ 前缀。
- 工作区配置会完全覆盖同名的用户级
files.exclude - 语言专属排除写法是
"[javascript]",注意全小写,[JavaScript]不生效 - 插件(如 GitLens、ESLint)可能绕过
files.exclude主动展示文件,验证时建议先禁用扩展
负向排除(!)要写在通用规则之后,且有作用域限制
如果想隐藏 node_modules 但保留 @types,得用 glob 的否定语法 !,但它只对当前层级有效,且顺序关键。
错误写法:"!node_modules/@types" 放在 "node_modules": true 前面,或单独使用——会被忽略。
正确顺序(字典序匹配):
{
"files.exclude": {
"node_modules": true,
"!node_modules/@types": true,
"!node_modules/types": true
}
}
-
!node_modules/@types只保留下一级的@types目录,其子目录(如@types/node)仍被父规则吃掉 - 若需保留
@types/node,还得额外加一条"!node_modules/@types/node" -
"**/node_modules/**"这种写法不必要,"**/node_modules"已足够,末尾/**反而略拖慢渲染
别混淆“隐藏”和“折叠”,也别指望它阻止所有视图显示
files.exclude 不是折叠按钮,也不是操作系统级隐藏,它只控制资源管理器的渲染逻辑。这意味着:
- 文件依然会在
Ctrl+Shift+F搜索结果中出现,除非你同步配置search.exclude - 某些插件面板(如 Git 变更列表、测试视图)可能仍列出被隐藏的文件
- 终端里
ls、find不受影响,VS Code 本身也没删任何东西 - 右侧辅助栏(如 Agents 模式下的次级侧边栏)也受
files.exclude控制,但主编辑器标题栏的放大按钮不影响此配置
最常被忽略的一点:路径必须严格匹配 glob 规则,"src/dist" 和 "**/dist" 的效果完全不同,前者漏掉绝大多数场景。写之前先想清楚是要“某一层级下”还是“任意层级下”。











