VSCode全局搜索卡顿需同时配置search.exclude和files.watcherExclude:前者用"/node_modules/": true等跳过子树,后者同步匹配以禁用监听;缺一不可,且修改后须关闭重开工作区。

VSCode全局搜索卡顿,不是项目太大,而是它在同步遍历所有子目录——node_modules、dist、.git这些目录没被真正跳过,主线程就卡死。必须同时配 search.exclude 和 files.watcherExclude,缺一不可。
search.exclude 配置不生效的常见写法错误
很多人以为加了 "**/node_modules": true 就完事,结果搜索还是慢。问题出在 glob 语义和 VSCode 的匹配逻辑上:
-
"node_modules"只匹配工作区根目录下的文件夹,packages/foo/node_modules完全逃逸 -
"**/node_modules"能匹配嵌套路径,但不会递归跳过其子目录(比如node_modules/.bin/esbuild仍会被读) - 必须写成
"**/node_modules/**":开头**/匹配任意层级,结尾/**表示跳过整个子树 - 多个条目用英文逗号分隔,不能换行、不能加注释,否则 JSON 解析失败,整段配置失效
files.watcherExclude 必须同步配,否则搜索准备阶段就卡
search.exclude 只管“搜的时候不读”,但 files.watcherExclude 才管“从一开始就不盯”。如果只配前者,VSCode 启动后就在后台疯狂监听 node_modules 里的每个 .js、.d.ts 文件变更,CPU 持续 20%+,搜索还没点开就已卡顿。
- 路径必须和
search.exclude完全一致:"**/node_modules/**": true,不是"true"字符串,是布尔值true - Python 项目要额外加:
"**/venv/**": true、"**/__pycache__/**": true、"**/.mypy_cache/**": true - 前端项目加:
"**/build/**": true、"**/out/**": true、"**/.next/**": true - 改完必须关闭整个工作区再重新打开,
Ctrl+P → workbench.action.reloadWindow不够,它不重置 watcher 状态
临时救急:搜索面板里手动填 files to exclude
刚发现卡顿,又不想改配置?直接在搜索面板里干预:
- 按
Ctrl+Shift+F(Win/Linux)或Cmd+Shift+F(macOS)打开搜索 - 点右上角 ⋯ → 展开
files to exclude输入框 - 填:
**/node_modules/**,**/dist/**,**/build/**(注意是英文逗号,无空格) - 这个设置只对本次搜索有效,适合查某个子包或临时验证排除效果
- 路径是相对工作区根目录的,不是当前文件所在路径
容易被忽略的硬伤:符号链接和中文路径
monorepo 或用了 yarn link 的项目,search.followSymlinks 默认为 true,VSCode 会顺着链接一路扫进外部 node_modules,瞬间多出几千个文件;中文路径在某些 Linux 环境下还会触发额外编码转换,加剧 CPU 压力。
- 在
.vscode/settings.json中加:"search.followSymlinks": false - 远程开发(Remote-SSH)时,还要配
remote.SSH.remoteServerEnv,限制远程端node进程内存,本地--max-old-space-size对它完全无效 - 大日志文件(如
app.log)单个就能阻塞 watcher 队列,建议加"**/*.log": true到两个 exclude 配置里
最常被跳过的动作是:改完配置后没关工作区重开,或者只配了 search.exclude 却忘了 files.watcherExclude。这两个配置不是“锦上添花”,是搜索能响应的前提。


















