search.exclude 必须显式配置 glob 模式如"**/dist": true,否则 node_modules/dist 不会被排除;它不读 .gitignore,且与 files.exclude 无关,修改后立即生效。

search.exclude 必须显式配置,否则 node_modules/dist 一定会被扫
VSCode 不会自动读 .gitignore,也不会默认忽略构建目录。你看到搜索结果里一堆 node_modules 或 dist 文件,不是它“太勤快”,而是你还没告诉它停手。只要没在 search.exclude 里写规则,它就全盘扫描。
正确写法:用 **/dist,不是 dist 或 ./dist
常见错误是直接写 "dist": true 或 "./dist": true——这些规则完全无效,VSCode 会静默丢弃。必须用 glob 模式,且几乎总要以 **/ 开头:
-
"**/dist"✅ 匹配项目任意深度下的dist目录(含src/dist、packages/foo/dist) -
"**/dist/**"✅ 效果同上,语义更明确(表示“整个目录及其内容”) -
"dist"❌ 只匹配根目录下的dist,子目录里的不生效 -
"**\dist"❌ Windows 下也必须用正斜杠/,反斜杠会被忽略
临时排除比改配置更快,但优先级更高
想快速验证某个关键词是否只在源码里出现?别改 settings.json,直接在搜索面板右上角点 ⋯ → «Files to exclude» 输入框里填:
-
**/dist/**,**/build/**✅ 多个规则用英文逗号分隔,**不能有空格** -
-exclude:**/tests/**❌ 不支持这种命令行风格语法,只认 glob
这个输入框的规则优先级高于 search.exclude,如果搜出来不该有的文件,第一反应就是检查这里有没有残留内容。
和 files.exclude 是两回事,别混用
search.exclude 只影响 Ctrl+Shift+F 的结果;files.exclude 控制侧边栏是否显示文件。你可能只想让搜索干净,但依然要在资源管理器里看到 dist(比如要手动删它)。这时只配前者就够了:
-
"search.exclude": { "**/dist": true }→ 搜索不扫dist,但侧边栏照常显示 -
"files.exclude": { "**/dist": true }→ 侧边栏隐藏dist,但搜索仍会扫(除非也配了search.exclude)
真正容易被忽略的是:修改 search.exclude 后立即生效,不用重启 VSCode,但如果你刚加完规则却没效果,大概率是 glob 写错或输进了临时排除框并忘了清空。











