VSCode全局搜索卡在“正在搜索…”是因未排除大目录导致主线程阻塞,需在工作区settings.json中精准配置search.exclude和files.watcherExclude,路径必须以/开头、/结尾,且files.watcherExclude值须为true(非字符串)。

为什么“正在搜索”卡住不动
VSCode 全局搜索卡在“正在搜索…”不是因为算法慢,而是它默认同步遍历所有子目录,一碰到 node_modules、dist、.git 这类含数万文件的目录,主线程就堵死——不读完元数据、不跳过二进制内容,连 UI 都会变灰。这不是你项目太大,是 VSCode 没被告诉“别扫这儿”。
必须配 search.exclude,且写法要精准
只在用户设置里加一行 "**/node_modules": true 不够,很多场景下仍会漏扫。真正起效的规则得满足三个条件:
-
**/开头:否则只匹配根目录下的同名文件夹(比如packages/legacy/node_modules就逃逸了) - 结尾加
/**:确保递归跳过整个子树,而不仅是文件夹本身(**/node_modules/**才能跳过node_modules/.bin/esbuild) - 多目录用逗号分隔,不换行:VSCode 对 JSON 格式敏感,换行或注释可能让整段配置失效
推荐直接往工作区的 .vscode/settings.json 里贴这段(比用户级设置优先):
"search.exclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/.git/**": true,
"**/*.log": true,
"**/*.zip": true
}
光配 search.exclude 还不够,files.watcherExclude 得同步加
很多人配完 search.exclude 发现还是慢,是因为文件监视器(file watcher)还在后台盯着那些大目录——即使不搜,它也在反复 stat 和 inotify,CPU 占用高,间接拖慢搜索准备阶段。
必须补上这个配置,路径和 search.exclude 保持一致:
"files.watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true,
"**/.git/**": true
}
注意:files.watcherExclude 不支持布尔值以外的值,别写成 "true" 字符串,否则无效。
临时救急:搜索面板里手动填 files to exclude
改配置要等下次搜索才生效,但你现在就想立刻搜?打开 Ctrl+Shift+F,点右上角 ⋯ → 展开 files to exclude 输入框,直接填:
-
**/node_modules/**(逗号分隔多个,如**/node_modules/**,**/dist/**) - 路径是相对工作区根目录的,不是当前文件位置
- 这个设置只对本次搜索有效,关掉面板就清空,适合临时查一个可疑子包
别写 node_modules 或 ./node_modules——VSCode 会当没看见。
最常被忽略的一点:排除规则越宽泛,预过滤开销越大。比如 **/a/**/b/**/c.js 比 **/c.js 多做三次路径切分,大型工作区里几十条这种规则,反而让搜索更慢。宁可多写几条明确路径,也别堆 **。


















