files.exclude路径必须相对于工作区根目录,仅支持glob语法,如"/node_modules": true;写错如"": true会导致文件树变空,且需同步配置search.exclude和files.watcherexclude。

直接改 files.exclude 就能隐藏资源管理器里的文件夹和文件,但写错路径会让整个文件树变空——不是崩溃,是被静默过滤掉了。
files.exclude 路径怎么写才生效
VSCode 的 files.exclude 路径始终相对于工作区根目录,不认 ./、/ 或正则语法。常见错误包括:./node_modules、**/node_modules/(末尾斜杠)、^node_modules$(正则)全都不起作用。
-
"node_modules": true→ 只匹配根目录下的node_modules -
"**/node_modules": true→ 匹配所有子目录里的嵌套node_modules(如 monorepo 中各包下的) -
"**/*.log": true→ 隐藏所有层级的.log文件;*.log只匹配根目录下 - 文件夹名含空格(如
my folder)直接写"my folder": true,无需转义
为什么改了 files.exclude 文件树还是空的
最常见原因是 glob 模式太宽,比如误写 "**": true 或 "**/*": true,导致所有路径都被匹配,整个工作区“消失”。这不是 bug,是规则生效了。
- 检查是否同时写了
"**/.*": true(默认隐藏所有点文件),它会把.env、.git全干掉 - 确认你编辑的是工作区设置(
.vscode/settings.json),不是用户级settings.json——后者常被前者覆盖 - 已展开的父目录不会自动刷新,手动折叠再展开,或按
Ctrl+R重载窗口 - 别用
files.include去“抢救”,它会覆盖exclude,且不支持通配符取反(!)
search.exclude 和 files.exclude 必须分开配
files.exclude 只影响资源管理器和 Ctrl+P 打开列表;search.exclude 才控制 Ctrl+Shift+F 是否扫描对应路径。两者语法一样,但完全独立。
- 只配
files.exclude→ 侧边栏看不见node_modules,但搜索里照样蹦出来 - 只配
search.exclude→ 搜索跳过dist,但资源管理器里它还堆在那儿 - 推荐同步写:
"**/node_modules": true、"**/dist": true、"**/.git": true同时出现在两个配置里 - 搜索框右上角的 “files to exclude” 输入框是临时规则,优先级高于
search.exclude,适合单次排查
大型项目还得配 files.watcherExclude
files.exclude 不影响文件系统监听。如果没配 files.watcherExclude,VSCode 仍会实时 watch node_modules 下成千上万个文件,导致保存卡顿、热更新延迟、CPU 占高。
- 必须和
files.exclude保持一致:"**/node_modules": true、"**/dist": true - 它不控制显示或搜索,只告诉 VSCode “别盯着这些目录看”
- 路径大小写敏感(尤其 macOS/Linux),
Node_modules≠node_modules - 修改后不用重启,但已触发的监听可能要等焦点切换或保存一次才释放
真正容易被忽略的是:files.exclude 是纯 UI 层过滤,不影响 Git 状态、终端操作、调试器断点或 Ctrl+P 搜索(除非也配了 search.exclude)。你藏掉了 dist,但 Git 依然会报告它的变更——这不是配置失效,是设计如此。











