VS Code 全局搜索仅识别 search.exclude 中格式正确的 glob 规则:须以 **/ 开头、值为 true、路径用正斜杠;硬编码排除 .git 等目录需显式设为 false;临时排除优先级更高且逗号不可带空格;配置修改后需重载窗口刷新索引。

search.exclude 配置必须用 **/ 开头的 glob 模式
VS Code 的全局搜索(Ctrl+Shift+F)默认不读 .gitignore,也不继承 files.exclude,只认 search.exclude 字段里的规则。但写错格式会静默失效——搜出来的“不该出现的文件”,大概率是这条规则根本没加载。
关键点:
-
"node_modules"只匹配工作区根目录下的同名文件夹;要排除所有层级的,必须写"**/node_modules" - 值必须是布尔型
true,不能是字符串"true"或数字1 - 路径分隔符必须用正斜杠
/,Windows 下写**\node_modules会被完全忽略 -
"*.log"只扫当前目录;要排除所有位置的日志文件,得写"**/*.log"
隐藏目录(如 .git、.vscode)默认被硬编码排除
就算你清空 search.exclude,.git、.vscode、.DS_Store 这些目录依然不会出现在搜索结果里——这是 VS Code 内置逻辑,优先级高于任何配置。
想让它们被搜到,必须显式反向覆盖:
-
"**/.git": false—— 注意是false,不是删掉这一行 -
"**/.vscode": false—— 同理,只删配置项无效 -
"**/.env": true—— 隐藏文件(非目录)默认不被硬编码排除,要屏蔽得手动加
临时排除比改配置更快,且优先级更高
不想动 settings.json,又急需搜一次 .git/config 或 dist/main.js?直接在搜索面板右上角点 ⋯ → «Files to exclude»,填入规则即可立即生效。
这个输入框的规则:
- 多个用英文逗号分隔,不能有空格:
**/tests/**,**/dist/**✅,**/tests/**, **/dist/**❌ - 关闭搜索面板后自动清空,不影响长期配置
- 优先级高于
search.exclude,所以搜出不该出现的文件,第一反应就是检查这里有没有残留内容
改完 search.exclude 不生效?重载窗口比重启更可靠
VS Code 搜索依赖本地索引缓存。修改配置后,旧索引可能还在返回已被排除路径下的文件,尤其在大型项目中。
操作建议:
- 按
Ctrl+Shift+P→ 输入Developer: Reload Window→ 回车 - 不用关所有标签页,也不用等完全重启,缓存立刻刷新
- 如果用了工作区设置(
.vscode/settings.json),它会覆盖用户级设置,记得确认当前生效的是哪一份
真正容易被忽略的是:硬编码排除行为不可绕过,只能靠 false 显式关闭;而临时排除框的空格问题,会让第二条规则彻底失效。











