files.exclude不生效是因为它只控制资源管理器显示,不作用于搜索,且路径必须用glob模式(如"**/node_modules":true)并置于正确作用域(各子项目独立的.vscode/settings.json),修改后需重载窗口。

为什么 files.exclude 不生效?
最常见的情况是路径写错或没放在正确的作用域里。VSCode 的 files.exclude 只对资源管理器(侧边栏文件树)起作用,且只匹配当前工作区根目录下的相对路径——不是绝对路径,也不是任意深度的模糊匹配。
- 写成
"**/node_modules"是对的;写成"./node_modules"或"node_modules"可能漏掉子项目里的依赖 - 如果用的是多根工作区(
.code-workspace),每个folders下的.vscode/settings.json才控制各自目录,不能靠主工作区配置统一管所有子项目 -
files.exclude不影响搜索结果,那是search.exclude的职责;两者必须分开配 - 改完后要重启资源管理器:按
Ctrl+Shift+P→ 输入Developer: Reload Window,否则可能缓存旧状态
search.exclude 和 files.exclude 有什么区别?
一个管“看得到”,一个管“搜得到”。它们互不替代,但容易混淆。
-
files.exclude:隐藏资源管理器里的文件/文件夹,不影响编辑、调试、Git 状态等任何其他功能 -
search.exclude:仅在全局搜索(Ctrl+Shift+F)时跳过匹配路径,文件依然显示在资源管理器里 - 两者都支持 glob 模式,但
search.exclude对正则无感,只认**、*、? - 若同时排除
dist,建议都写上:"**/dist",避免搜索时误触构建产物里的旧代码
多根工作区里怎么让每个项目独立过滤?
不能靠一个 .code-workspace 文件统配。VSCode 的设计是「每个文件夹一份 .vscode/settings.json」,而不是「一个工作区一份」。
- 每个子项目根目录下必须有自己独立的
.vscode/settings.json,里面写各自的files.exclude和search.exclude - 如果某个子项目没建
.vscode目录,它就继承全局设置,很可能暴露不该出现的文件(比如后端项目的node_modules出现在前端资源树里) -
.code-workspace文件本身不支持直接写files.exclude,它只管folders和顶层settings(后者会覆盖所有子项目,通常不推荐) - 检查是否生效:右键某个被排除的文件夹 → 如果菜单里还有 “Reveal in Explorer”,说明没排除成功;如果灰色不可点,才是真隐藏
过滤后文件突然又出现了,怎么回事?
大概率是 Git 插件或语言服务器在后台“复活”了被排除的路径。
- GitLens 或内置 Git 扩展会强制显示已跟踪但被
files.exclude掩盖的文件(比如.gitignore里没写的日志文件),这是预期行为,不是 bug - TypeScript / Python 语言服务器可能把
node_modules里的类型声明文件拉进大纲视图,哪怕你排除了整个目录——这是 LSP 的符号解析逻辑,和files.exclude无关 - 某些扩展(如
Explorer Exclude)会覆盖原生过滤规则,禁用后再试一次,确认是否冲突 - 最隐蔽的坑:
files.exclude不递归排除子目录里的同名文件夹。例如排除"**/logs",但src/api/logs和tests/logs都会被隐藏;而写成"logs"只会隐藏项目根下的logs,容易误判效果


















