VSCode全局搜索会扫描插件目录,需在settings.json中配置"**/.vscode/extensions": true并重载窗口才能排除;临时过滤可使用搜索面板的“Files to exclude”输入框。

为什么搜索结果里总冒出 prettier、eslint 这些插件代码
VSCode 全局搜索(Ctrl+Shift+F)默认不区分“你的项目”和“插件源码”,只要文件在文件系统路径内、又没被显式排除,就会扫进去。比如你在 macOS 上搜 onDidChangeConfiguration,结果里混着 esbenp.prettier-vscode 的源码——这不是 bug,是 VSCode 没被拦住。
关键点在于:search.exclude 是唯一能控制这个行为的配置;.gitignore、files.exclude、甚至 tsconfig.json 里的规则,对搜索完全无效。
怎么永久排除 ~/.vscode/extensions 或 %USERPROFILE%\.vscode\extensions
插件目录路径因系统而异,但统一用 **/.vscode/extensions 就能覆盖所有情况——**/ 匹配任意前缀(/home/user/.vscode/extensions 或 C:/Users/x/.vscode/extensions 都行)。
- 打开命令面板(
Ctrl+Shift+P),输入Preferences: Open Settings (JSON) - 在
search.exclude对象里加一行:"**/.vscode/extensions": true - 保存后必须执行
Developer: Reload Window(不是重启 VSCode),否则缓存索引不更新,规则静默失效
注意:Windows 用户别写反斜杠 **\,VSCode 只认正斜杠 /;也不要用 ~ 开头(如 ~/.vscode/extensions),部分版本解析不稳定,**/ 更可靠。
临时过滤比改配置更快:用搜索面板里的 “Files to exclude”
如果你只是某次想确认某个关键词是否只出现在自己代码里,不想动全局设置,直接在搜索面板底部点 ⋯ → Files to exclude 输入框填规则就行——它优先级高于 search.exclude,且关掉面板就自动清空。
- 填
**/node_modules/**,**/dist/**(逗号前后不能有空格) - 填
**/.vscode/extensions同样生效 - 填错会静默失败(比如漏了
**/前缀),结果不变,容易误以为“功能坏了”
这个输入框只影响当前搜索,适合调试时快速验证:比如你怀疑构建产物干扰了结果,临时填 **/dist/** 再搜一次,对比就清楚了。
为什么改了 settings.json 还是搜出第三方依赖
最常被忽略的是索引缓存问题。VSCode 搜索依赖本地构建的索引,修改 search.exclude 后不会自动重建,尤其在大型项目里,旧结果可能持续出现好几秒甚至更久。
- 必须重载窗口(
Developer: Reload Window),重启 VSCode 不等于重载 - 如果仍不行,手动删掉项目根目录下的
.vscode/.search文件夹(如果存在),再重载 - 检查有没有多根工作区(
.code-workspace),此时search.exclude必须写在该文件的settings字段里,用户级设置会被覆盖
真正起效的永远只有那一条:"**/.vscode/extensions": true,加在对的位置、重载对的窗口、清掉旧索引——少一个环节,第三方插件代码就还会冒出来。











