vscode默认搜索卡顿是因为内置搜索遍历所有子目录且不自动遵循.gitignore规则,导致node_modules等大目录被无差别索引;必须配置search.exclude、启用search.useripgrep并设search.followsymlinks为false以优化性能。

为什么默认搜索在大型项目里总卡住
因为 VSCode 内置搜索默认遍历所有子目录,且不自动尊重 .gitignore 规则。遇到 node_modules、vendor、dist、storage/framework 这类目录时,索引量暴增,尤其 Windows 下极易假死。
这不是插件慢,是搜索策略没对齐项目结构。你得先告诉 VSCode “哪些地方根本不用看”。
- 必须启用
search.useRipgrep:它比内置搜索快 5–10 倍,原生支持-g过滤 - 禁用符号链接扫描:
search.followSymlinks设为false,避免循环引用拖垮进程 - 排除路径别只写在 UI 框里——那只是隐藏结果,不减少实际扫描。要写进
settings.json的search.exclude和files.exclude
多根工作区不是“多开文件夹”,而是逻辑隔离
把整个 monorepo 根目录直接拖进 VSCode,等于让 TypeScript 语言服务、ESLint、PHP Intelephense 全部在同一上下文里抢资源。后果是跳转不准、诊断误报、CPU 占满。
真正有效的做法是按职责拆成独立“根”:
-
frontend/(含.vscode/settings.json配"typescript.preferences.includePackageJsonAutoImports": "auto") -
backend/(配"php.suggest.basic": false+intelephense.environment.includePaths) -
shared/(只开文件监视,禁用所有 LSP)
注意:.code-workspace 文件里不要写 extensions 字段——它只对第一个根生效,其余根仍会静默启用全局推荐扩展。
vscode-crosside-code-finder 解决的是“找代码”的语义模糊问题
Ctrl+Shift+F 能搜到 api.getUserInfo,但你真正想问的是:“这个调用出现在哪些 Vue 页面里?是否绕过了权限校验?有没有被 test 文件误用?”——这些没法靠字符串匹配回答。
这个插件的核心价值,在于把搜索变成可复用的“查询语句”:
- 定义一个 Finder:路径 =
src/views/**,包含 =**/*.vue,排除 =**/test/**,内容 =api\.getUserInfo - 保存为
auth-calls-in-views,下次一键执行,结果干净无噪音 - 支持正则捕获组,比如用
(const|let|var)\s+(\w+)\s*=\s*api\.getUserInfo提取所有调用变量名,方便后续分析
它不替代 grep,而是把 grep 的灵活性封装成 IDE 内可存、可点、可协作的操作单元。
Markdown 目录跳转失效,90% 是锚点生成规则和实际标题不一致
插件(如 Markdown All in One)生成的链接形如 [简介](#简介),但点击无效,往往不是插件坏了,而是标题文本里藏了空格、emoji 或不可见字符。
检查方法很简单:打开预览窗口,右键 → “检查元素”,看对应 <h2 id="简介"></h2> 的 id 属性是否真等于链接里的 #简介。
- 中文标题默认转成拼音或全小写连字符,取决于插件配置;
markdown.extension.toc.slugifyMode设为github才能兼容 GitHub 预览行为 - 含空格或标点的标题(如
## API v2.1 新增接口)会被 slugify 成api-v2-1-新增接口,但手动写的链接若写成#API-v2.1-新增接口就会断 - 解决办法:统一用插件生成,别手写
[xxx](#yyy);或者关掉自动 slugify,改用markdown.extension.toc.slugifyMode: "off",自己控制 ID
最易被忽略的一点:VSCode 的 Markdown 预览是沙箱环境,它不会加载你项目里自定义的 CSS 或 JS,所以任何依赖前端脚本修正锚点的行为,在预览里都不可用。











