VSCode 的 files.exclude 失效主因是工作区设置覆盖、JSON 格式错误或缓存未刷新;它仅影响资源管理器和 Ctrl+P 显示,不影响搜索;需检查设置层级、修正 glob 语法、重载文件夹并确保资源管理器激活。

VSCode 的隐藏文件配置(files.exclude)失效,通常不是规则没写,而是它被更高优先级的配置覆盖、语法出错、或缓存没刷新——90% 的问题集中在工作区设置误配和 JSON 格式错误上。
为什么改了 files.exclude 却不生效?
VSCode 的文件排除逻辑分两层:显示(资源管理器/Ctrl+P)和搜索(Ctrl+Shift+F),而 files.exclude 只管前者。常见失效原因包括:
- 你改的是用户级
settings.json,但当前项目存在.vscode/settings.json,后者会完全屏蔽前者 -
files.exclude里写了非法 JSON(比如用了// 注释、单引号、末尾逗号),VSCode 静默跳过整个字段 - 规则写成
"**/.*": true后又手动加了"**/.git": false,但false不是有效值——必须用"**/.git": {"when": "$(basename).git"}或直接删掉该行 - 你只改了
files.exclude,但search.exclude还保留着同样规则,导致文件“看得见却搜不到”
怎么快速定位是哪个配置在起作用?
打开命令面板(Ctrl+Shift+P),运行 Preferences: Open Workspace Settings (JSON),检查是否存在 files.exclude 字段。如果存在,直接在这里改;如果不存在,再查用户设置。
更可靠的方法是临时清空工作区设置:
- 关闭当前窗口
- 重命名项目根目录下的
.vscode/文件夹(如改为.vscode.bak) - 重新用
File > Open Folder打开项目 - 此时所有排除行为都回落到用户设置,可验证是否恢复
files.exclude 规则写法与典型陷阱
VSCode 的 glob 匹配不支持 ** 在任意位置递归(仅支持 **/ 开头),且路径匹配区分大小写(Windows 上除外)。常见错误写法:
- ❌
"**/node_modules/**": true→ 应写为"**/node_modules": true或"node_modules/": true - ❌
"*.log": false→false无效,要取消忽略就直接删掉这行 - ❌
"**/.env": true写在用户设置里,但工作区设置了"**/.*": true,后者优先级更高 - ✅ 正确放行
.env:删掉"**/.*": true,或显式写"**/.env": false(注意:VSCode 1.85+ 支持false,旧版仍需删规则)
改完配置后为什么还是不刷新?
VSCode 不监听 settings.json 文件变更,改完必须触发视图重载:
- 关闭再重新打开文件夹(
File > Close Folder→File > Open Folder),仅靠Developer: Reload Window不够 - 如果用了 Remote-SSH 或 DevContainer,修改的是远程端的
settings.json,本地改无效 - 某些插件(如 Settings Sync)可能在后台自动拉取旧配置,务必先执行
Preferences: Turn Off Settings Sync
最隐蔽的点:files.exclude 生效依赖于资源管理器已激活。如果左侧图标栏都不见了,先按 Ctrl+Shift+E 唤醒视图,否则规则根本没机会执行。


















