必须同时配置 search.exclude 和 files.watcherexclude,仅改前者会导致卡死;后者从源头禁用监听,防止 inotify 句柄泄漏和内存飙升,通配符需写全如 "/node_modules/"。

search.exclude 和 files.watcherExclude 必须同时配
只改 search.exclude 会卡死,因为 VSCode 在打开工作区那一秒就启动了文件监听器(watcher),而卡顿往往发生在监听阶段——files.watcherExclude 才是真正阻止它注册 node_modules 这类路径的开关。两者不联动,等于一边关窗一边开大门。
-
search.exclude:跳过搜索时的内容读取,但文件元数据仍可能被加载 -
files.watcherExclude:从源头禁止监听,防止 inotify 句柄泄漏和内存爬升 - 通配符必须写全:
"**/node_modules/**"中结尾的/**不可省;写成"node_modules"或"**/node_modules"都无效 - 常见必加项:
"**/node_modules/**"、"**/.git/**"、"**/dist/**"、"**/build/**"、"**/out/**"、"**/*.log"
远程开发(Remote-SSH)要额外设 VSCODE_NODE_OPTIONS
Remote-SSH 下搜索卡死,90% 不是网络慢,而是远程服务器上的 searchService 和 tsserver 进程没内存限制,遇到中文路径或大 node_modules 直接吃光 4GB 内存。本地设 --max-old-space-size 对远程进程完全无效。
- 在
.vscode/settings.json中加:"remote.SSH.remoteServerEnv": { "VSCODE_NODE_OPTIONS": "--max-old-space-size=4096" } - Linux 远程机还需检查 inotify 限制:
cat /proc/sys/fs/inotify/max_user_watches,低于524288就要调高 - Windows Subsystem for Linux(WSL)同理,需在 WSL 内执行
sudo sysctl fs.inotify.max_user_watches=524288
search.resultLimit 和 search.maxFileSize 是隐形截断器
搜着搜着突然没结果了?不是没匹配到,而是被两个默认值默默拦住了:一个是结果条数上限,一个是单文件大小上限。UI 显示“… and N more”不代表后端没找到,只是前端渲染做了妥协。
-
search.resultLimit默认通常是 2000,设为0表示不限制(注意:首次搜索响应可能变慢) -
search.maxFileSize默认 12800 字节(约 12.5KB),dist/bundle.js或大 JSON 就直接被跳过;建议设为5242880(5MB)或按需调整 - 别忽略
search.useIgnoreFiles:如果开了它(默认开启),.gitignore里写的路径会被直接过滤,哪怕内容再小也不搜——设为false才能确保排除逻辑只走search.exclude
中文搜索卡得更凶,关键在 Unicode 解码和 AST 预编译
中文本身不拖慢搜索,但 VSCode 默认用 Unicode 模式做字符解码 + 正则预编译,加上未排除大目录时,searchService 会为每个文件重复这套流程。含大量中文注释的 TSX 或 JSON 文件,内存增长比纯英文项目快 2–3 倍。
-
search.quickOpen.includeSymbols默认开启,会强制解析所有 TS/JS 文件 AST,对中文命名变量也照单全收——设为false可降内存占用一半以上 - 中文路径(如
src/组件/工具函数.ts)在某些 Linux 文件系统下会触发额外编码转换,加剧 CPU 压力;files.watcherExclude能绕过这部分开销 - 真要高频搜中文,终端用
rg -g '!node_modules' '关键词'(需提前装ripgrep)比 VSCode 搜索快且稳,不占编辑器内存











