真正起作用的是search.exclude,files.exclude仅控制资源管理器显示;正确写法为"**/node_modules": true,支持嵌套层级;临时排除路径在搜索面板中设置,会覆盖search.exclude配置。

search.exclude 才管全局搜索,files.exclude 完全不相关
改了 files.exclude 却发现 Ctrl+Shift+F 还是搜出一堆 node_modules 里的文件?不是配置没生效,是压根用错了地方。files.exclude 只控制左侧资源管理器是否显示文件夹,对搜索行为零影响。真正起作用的只有 search.exclude,它专为全局搜索设计,且只在搜索时生效。
正确写法必须带 **/ 前缀
"node_modules": true 看起来简洁,但 VSCode 不认——它只做字面路径匹配,而真实路径通常是 src/lib/node_modules 或 packages/core/node_modules,没前缀就完全不触发。
- ✅ 推荐:
"**/node_modules": true(覆盖所有嵌套层级,包括 monorepo 子包) - ✅ 可选:
"node_modules": true(仅根目录,适合单层结构) - ❌ 无效:
"node_modules/**": true、"node_modules": true、"**\node_modules": true(Windows 反斜杠也不行)
临时排除比永久配置更灵活,但优先级更高
打开搜索面板(Ctrl+Shift+F),点右下角 ⋯ → «Files to exclude»,直接填 **/node_modules,逗号分隔多个规则,比如 **/node_modules,**/dist,**/*.log。这个输入框的规则会覆盖 search.exclude 配置,且只对本次搜索生效。
- 适合调试:想确认某段逻辑是否只存在于
legacy目录,加一条再搜 - 注意:只要这里非空,
search.exclude就被忽略——哪怕你刚改完设置也不会生效 - 路径仍按 glob 解析,相对工作区根目录,不支持
~或环境变量
多根工作区下,每个子文件夹要单独配
如果你开的是多根工作区(比如同时打开 packages/app 和 packages/utils),search.exclude 是按文件夹分别生效的。根目录下的配置不会自动继承到子文件夹。
- 想屏蔽
packages/legacy但保留packages/utils的搜索,就得在对应子文件夹的.vscode/settings.json里单独设search.exclude - 别用绝对路径,一律用相对路径 +
**/规则 - 规则写太宽(比如堆一堆
**/log/**、**/tmp/**)会让 VSCode 每次搜索前逐条匹配,反而拖慢速度
最常被忽略的一点:VSCode 的 glob 匹配是字符串扫描,不是正则引擎。写错一条规则可能让搜索变慢,甚至漏结果。“**/a/**/b/**/c.js”这类嵌套太多 ** 的写法,会让匹配时间指数增长。











