全局搜索排除规则必须写入用户级settings.json,格式为"search.exclude": {"/node_modules": true},需用正斜杠、带/前缀,修改后须重载窗口或清除索引才生效。

全局设置里改 search.exclude 必须写进用户 settings.json
VSCode 的全局搜索排除规则(即所有项目都生效的规则)只能通过用户级 settings.json 配置,不能写在 package.json、tsconfig.json 或任何项目配置文件里——那些 VSCode 根本不读。
操作路径:Ctrl+Shift+P → 输入 Open User Settings (JSON) → 回车,打开的就是用户级配置文件。
- 必须用对象格式:
"search.exclude": { ... },不能只写数组或字符串 - 每条规则单独成键,值必须是
true(不是"true"或1) - 常见全局排除项:
"**/node_modules"、"**/dist"、"**/.env"、"**/*.log" - 写错格式(比如漏掉
**/前缀、用反斜杠\、结尾多加/)会导致整条规则静默失效
search.exclude 的 glob 写法必须带 **/ 前缀
裸写 "node_modules": true 或 "dist/": true 完全不生效。VSCode 的 glob 匹配是前缀匹配,不是模糊查找。
-
"**/node_modules"✅ 匹配任意深度下的node_modules目录(monorepo、lerna、pnpm workspace 全覆盖) -
"/node_modules"✅ 只匹配工作区根目录下的node_modules,适合单包项目 -
"node_modules"❌ 不匹配任何路径,因为真实路径是src/utils/node_modules这类 -
"**\node_modules"❌ Windows 用户常犯,反斜杠不被 glob 解析器识别,必须用正斜杠/ -
"**/dist/**"和"**/dist"效果一样,但加/**更明确表示“整个目录及其子内容”
改完 search.exclude 没生效?先重载窗口再查缓存
VSCode 搜索依赖本地索引,修改配置后不会自动刷新已有搜索结果。尤其在大型项目中,旧索引可能持续返回已被排除路径下的文件。
- 最快速修复:Ctrl+Shift+P → 输入
Developer: Reload Window→ 回车(比重启快,且保留所有标签页) - 更彻底方式:删掉项目根目录下的
.vscode/.search文件夹,强制重建索引 - 检查是否被临时设置覆盖:打开搜索面板(Ctrl+Shift+F),点右上角 ⋯ → «Files to exclude»,如果那里非空,它会直接屏蔽
search.exclude里的所有规则 - 已打开的搜索面板不会自动读新配置,需关闭后重新打开才生效
别把 search.exclude 和 files.exclude 搞混
search.exclude 只影响 Ctrl+Shift+F 全局搜索和 Ctrl+Shift+H 替换;files.exclude 控制资源管理器里是否显示文件,也会影响 TypeScript 路径提示等语言服务,但它对搜索结果完全没作用。
- 想让
.git、.vscode在侧边栏消失?配files.exclude - 想让搜索不扫
node_modules?必须配search.exclude - 两者可以共存,但语义和生效范围完全不同,混用会导致配置看似写了却不起效
- Git 插件或 Workspace Trust 设置为“受限”时,部分
search.exclude规则可能被禁用,需检查设置状态











