search.exclude必须写在.vscode/settings.json(工作区级)或用户级settings.json中才生效,写入tsconfig.json、package.json等其他文件无效;路径需用"**/dist": true等glob格式,修改后需重载窗口或清除搜索缓存才能生效。

search.exclude 写在哪才生效
必须写在 .vscode/settings.json(工作区)或用户级 settings.json 里,其他地方一律无效。常见错误是往 tsconfig.json、eslint.config.js 或 package.json 里塞 search.exclude——VSCode 根本不读这些文件的这个字段。
推荐优先用 .vscode/settings.json:只对当前项目起作用,能提交进 Git,团队成员开箱即用;如果想所有项目都跳过 node_modules,再改用户设置(Ctrl+, → 右上角“打开设置(JSON)”图标)。
注意:.vscode/settings.json 会覆盖用户设置,但仅限该工作区生效。
路径写成 "**/dist" 还是 "dist"?
用 "**/dist": true,不是 "dist": true,也不是 "dist/**": true。前者匹配任意层级下的 dist 文件夹,后者只匹配根目录下名为 dist 的文件夹,而 "dist/**" 是冗余写法,VSCode 默认递归处理已匹配的目录。
典型翻车点:
-
"src/lib/**"在 monorepo 里常失效,因为实际路径可能是packages/my-app/src/lib/,应写成"**/src/lib" -
"build"只排除根目录下的build,子目录里的packages/foo/build仍会被搜到 - 想排除所有
.log文件,必须写"**/*.log": true,"*.log"或".log"都无效
改了配置为什么搜索结果还不变?
最常被忽略的是索引缓存。VSCode 全局搜索依赖本地倒排索引,修改 search.exclude 后不会自动重建索引,尤其在大项目里,旧结果还会持续出现几秒甚至几十秒。
解决办法只有两个:
- 手动重载窗口(Ctrl+Shift+P → 输入 “Developer: Reload Window”)
- 或清空搜索索引:Ctrl+Shift+P → 输入 “Search: Clear Search History and Cache”
别指望保存配置后立刻生效——这是 VSCode 搜索机制决定的,不是你配错了。
files.exclude 和 search.exclude 有什么区别?
files.exclude 控制资源管理器里“显示/隐藏”哪些文件,search.exclude 专管全局搜索(Ctrl+Shift+F)是否扫描这些路径。两者互不影响,但可以共用同一套 glob 模式。
实际效果差异:
-
"**/node_modules": true写在files.exclude里 → 左侧文件树里看不到node_modules,但它仍可能出现在搜索结果中 -
"**/node_modules": true写在search.exclude里 → 搜索面板里完全不扫这个目录,哪怕它在文件树里可见 - 想彻底隔离,两个地方都得配;只配一个,就只解决一半问题
真正容易被忽略的是:files.exclude 会影响文件系统监听,间接导致部分文件压根不进搜索索引——但这不是设计保证,而是底层行为,不可依赖。要确保不搜,只认 search.exclude。


















