search.exclude 必须使用正确的 glob 格式(如"*/.log"),路径用正斜杠、值为true、配置在.vscode/settings.json中,修改后需重载窗口或删除.search文件夹刷新索引。

search.exclude 必须写对 glob 格式,否则静默失效
VSCode 不会报错,也不会提示你配置错了——它直接忽略整条规则。最常见错误是写 "*.log" 或 ".log",前者只匹配根目录下的 .log 文件,后者语法非法,整条规则被丢弃。
正确写法必须带 **/ 前缀,表示“任意层级”:
-
"**/*.log": 排除所有目录下的 .log 文件 -
"**/node_modules": 排除所有嵌套层级的 node_modules 目录(包括packages/my-app/node_modules) -
"**/dist/**": 排除 dist 及其全部子内容,语义比"**/dist"更明确
路径必须用正斜杠 /,Windows 下写 **\node_modules 也完全无效;结尾多一个 /(如 "**/dist/")会导致匹配失败,因为真实路径不含末尾斜杠。
配置位置和生效范围要分清
search.exclude 只在 .vscode/settings.json(工作区)或用户级 settings.json 中生效,写进 tsconfig.json、package.json 或 eslint.config.js 里,VSCode 根本不读。
推荐优先写进项目根目录的 .vscode/settings.json:
- 团队协作时可提交,避免每人手动配
- 工作区设置会覆盖用户设置,但仅限该文件夹下生效
- 值必须是布尔值
true,不能是字符串"true"或数字1
如果想全局排除(比如所有项目都跳过 node_modules),改用户设置:Ctrl+, → 右上角打开设置 JSON 图标 → 添加到 settings.json。
临时排除比改配置更快,且优先级更高
打开搜索面板(Ctrl+Shift+F)后,右上角点 ⋯ → «Files to exclude»,直接填规则,本次搜索立即生效,关掉面板自动清空。
这个输入框的优先级高于 search.exclude,所以搜出不该出现的文件,第一反应就是检查这里有没有非空内容。
多个规则用英文逗号分隔,**不能有空格**:
- ✅
**/node_modules/**,**/dist/** - ❌
**/node_modules/**, **/dist/**(空格会让第二条失效)
想临时包含默认被排除的目录?填 !**/node_modules/**,开头的 ! 表示“强制包含”。
改了配置没生效?不是配错了,是缓存没刷新
VSCode 搜索依赖本地索引缓存,修改 search.exclude 后不会自动重建索引。尤其大项目里,旧结果可能持续返回已被排除路径下的文件。
最可靠做法是重载窗口:Ctrl+Shift+P → 输入 Developer: Reload Window → 回车。比重启快,且保留所有打开的标签页。
更彻底的方式是删掉项目根目录下的 .vscode/.search 文件夹(如果存在),让 VSCode 强制重建索引。
已打开的搜索面板不会自动读新配置,必须关闭再重新打开才生效。











