files.exclude没生效需检查三件事:未关闭重开文件夹、配置层级被覆盖、与search.exclude混淆;路径须用相对于工作区根的glob模式,如"**/dist";隐藏仅影响资源管理器和Ctrl+P,不影响文件系统或扩展功能。

files.exclude 为什么没生效?先看这三件事
改了 files.exclude 却发现文件还在资源管理器里,大概率是以下三个问题之一:没关重开文件夹、配错配置层级、或和 search.exclude 混了。VSCode 不会热刷新 files.exclude,必须执行 File > Close Folder → File > Open Folder 才能生效;仅重启 VSCode 或刷新窗口无效。
其次,files.exclude 是分层覆盖的:.vscode/settings.json(工作区) > 用户级 settings.json。如果你在用户设置里加了规则,但项目根目录下已有 .vscode/settings.json 且里面也定义了 files.exclude,那用户设置完全不会起作用。
最后,search.exclude 和 files.exclude 完全无关——前者只影响 Ctrl+Shift+F 搜索结果,后者才控制左侧资源管理器是否显示。想让文件“既看不见又搜不到”,两个地方都得配。
路径怎么写才对:glob 模式不是正则,也不是相对路径
files.exclude 的键名是 glob 模式,所有路径都相对于工作区根目录,且必须用通配符表达层级关系。常见错误包括:
-
"node_modules": true—— 只匹配根目录下的node_modules,子目录里的packages/foo/node_modules依然可见 -
"dist/**": true—— 语法非法,VSCode 不识别这种写法 -
"**/dist"—— 正确,递归匹配任意深度的dist目录 -
"**/*.exe"—— 正确,隐藏所有位置的.exe文件 -
"**/.DS_Store"—— 正确,但若只想隐藏 macOS 系统文件,别顺手写成"**/.*": true,否则.env.git全消失
空格、连字符、点号等特殊字符无需转义:"my folder": true 和 "build-output": true 都合法。
想隐藏点文件(.env、.git)但保留部分,怎么精细控制?
默认规则 "**/.*": true 是“一刀切”,删掉它最简单;但若只想放行 .env 而继续隐藏 .DS_Store 和 .git,就得拆开写:
在 .vscode/settings.json 中明确列出:
{
"files.exclude": {
"**/.DS_Store": true,
"**/.git/**": true,
"**/.*": false
}
}
注意顺序无关,VSCode 按 glob 精确匹配,不走“就近优先”。但负向排除("!**/.env")不被 files.exclude 支持——它只认布尔值,不支持 ! 语法。如需例外逻辑,只能靠显式设为 false 或漏掉不写。
另外,.git 建议用 "**/.git/**": true 而非 "**/.git": true,避免某些 Git 插件读取子路径时异常。
隐藏后文件还能用吗?哪些地方会“看不见”?
能用,而且完全不受影响:files.exclude 只过滤资源管理器(侧边栏)、Ctrl+P 快速打开列表、以及 Explorer 视图里的渲染。它不碰文件系统、不影响终端命令、不干扰 Git 操作、也不阻止 ESLint 或 TypeScript Server 读取被隐藏的文件。
但要注意:某些扩展(比如 GitLens、Project Manager)会主动扫描整个工作区,可能在自己的视图里仍列出 node_modules 或 .env——这不是 bug,是它们绕过了 VSCode 的排除逻辑。验证是否真隐藏成功,最可靠的方式是关掉所有扩展,只留原生功能测试。
真正容易被忽略的一点:如果你在 files.exclude 里误写了 "**": true 或 "**/*": true,整个资源管理器会变空——不是崩溃,是所有路径都被匹配过滤了,连 src package.json 都没了。遇到这种情况,直接删掉那行再重开文件夹就行。


















