search.exclude 必须配置为 "**/node_modules/**" 等带前后双星号和结尾 /** 的格式才生效,否则无法排除目录;还需同步配置 files.watcherexclude 和语言服务相关设置,三者协同才能根治搜索卡顿与高cpu问题。

search.exclude 配置必须写对,否则白搭
VSCode 搜索慢不是算法问题,是它默认打开每个文件读内容。只要 node_modules 或 dist 里有上万文件,Ctrl+Shift+F 就会卡在 I/O 等待上。关键不是“要不要排除”,而是怎么写才真正生效:
-
"**/node_modules/**"必须带前后双星号和结尾/**,写成"node_modules"或"**/node_modules"不起作用 - 常见要加的还有:
"**/dist/**"、"**/build/**"、"**/*.log"、"**/*.zip" - 这些配置只在项目级
.vscode/settings.json中生效,用户级设置会被覆盖 - 改完必须关闭并重新打开工作区,仅保存文件不触发重载
files.watcherExclude 是防止 CPU 疯跑的第一道闸
搜索慢只是表象,真正让 CPU 持续 100% 的,是文件监听器(chokidar)被 node_modules 里的几万个文件反复触发。这不是搜索时才发生,而是你打开项目就一直在后台狂转:
- 必须配
"files.watcherExclude",且规则和search.exclude基本一致:"**/node_modules/**"、"**/.git/**"、"**/dist/**" - Linux 用户如果仍卡顿,检查
/proc/sys/fs/inotify/max_user_watches,低于524288就得调高 - 这个设置不生效的最常见原因是路径漏了
/**后缀,或写在了错误的 settings.json 里
别让语言服务偷偷帮你“全量索引”
TypeScript 和 Python 的语言服务器(tsserver、pyright)默认会扫描整个 node_modules/@types 或依赖树做类型推导——这本质就是一次静默的全局搜索,而且不走 search.exclude 规则:
- 关掉自动导入能立竿见影:
"typescript.preferences.includePackageJsonAutoImports": "off" - TypeScript 项目可加
"typescript.tsserver.maxMemory": 4096防 OOM,避免因内存不足反复重启进程 - Python 用户若不需要深度类型检查,把
python.languageServer改为"Jedi"而非"Pylance",后者默认全量加载
Copilot Chat 也会偷偷扫文件,得单独拦住
VSCode Copilot Chat 默认会对整个工作区做上下文感知,包括读取 node_modules 里的包说明、遍历 dist 输出——哪怕你没主动打开聊天面板:
- 在
.vscode/settings.json中加:"github.copilot.chat.ignorePatterns": ["node_modules/**", "dist/**", "*.log"] - 这个配置和
search.exclude独立,不共用,漏配就会多出几百 MB 内存和额外 CPU - 如果不用 Copilot Chat,直接禁用该扩展比调配置更彻底











