必须用"/*.log": true等glob格式配置search.exclude,否则静默失效;路径须以/开头、用正斜杠、值为true,临时排除在搜索面板"Files to exclude"中设置且优先级更高。

search.exclude 必须写对 glob 格式,否则静默失效
VSCode 的全局搜索(Ctrl+Shift+F)默认会扫 node_modules、dist、日志文件等——不是它“忘了排除”,而是你没配 search.exclude,或者配错了格式。它不读 .gitignore,也不继承 files.exclude,只认自己这个字段。
关键点:
-
search.exclude的值必须是对象,每个规则一个键,值为true(不能是字符串"true") - 路径必须用 glob 模式,且几乎总要以
**/开头,否则只匹配根目录下同名项 - Windows 下也必须用正斜杠
/,写**\node_modules会被完全忽略 - 结尾加不加
/**不影响排除效果,但加了更明确(如**/dist/**),推荐统一用**/dist
排除单个文件类型:比如所有 .log 文件
错误写法:"*.log": true 或 ".log": true —— 前者只扫当前目录,后者语法非法,整条规则被丢弃。
正确写法:"**/*.log": true
常见组合示例(放进 .vscode/settings.json):
{
"search.exclude": {
"**/*.log": true,
"**/*.tmp": true,
"**/*.swp": true,
"**/coverage/**": true
}
}
注意:**/coverage/** 和 **/coverage 效果一样,但前者语义更清晰,表示“整个目录及其内容”。
临时排除某次搜索:别动配置,直接填 Files to exclude
打开搜索面板后,右上角点 ⋯ → «Files to exclude» 输入框,填入规则即可立即生效,关掉面板自动清空。
使用场景:
- 想确认某个关键词是否只出现在
src/下,临时加**/tests/**, **/mocks/** - 调试时怀疑某段逻辑被
dist/里的旧代码干扰,临时填**/dist/** - 多个规则用英文逗号分隔,不能有空格:写成
**/node_modules/**,**/build/**✅,写成**/node_modules/**, **/build/**❌(空格会让第二条失效)
这个输入框的优先级高于 search.exclude,所以如果搜出来不该出现的文件,第一反应就是检查这里有没有非空内容。
改完配置不生效?重载窗口比重启更可靠
VSCode 搜索依赖本地索引缓存,修改 search.exclude 后不会自动刷新已有搜索结果。尤其在大型项目里,旧索引可能持续返回已被排除路径下的文件。
操作建议:
- 按
Ctrl+Shift+P→ 输入Developer: Reload Window→ 回车(比完全重启快,且保留所有打开的标签页) - 如果仍不对,删掉项目根目录下的
.vscode/.search文件夹,强制重建索引 - 别信“保存就立刻生效”——已打开的搜索面板需关闭再重新打开,新面板才读新配置
- 检查是否误填了
Files to include(图标是?),只要它非空,search.exclude就完全被绕过
最常被忽略的是:你以为排除了 node_modules,其实只是 Files to include 里写了 src/**/*.ts,导致 VSCode 只扫 src 下的 .ts,而 search.exclude 根本没机会起作用。


















