VSCode搜索默认硬编码排除.git、.vscode等目录,需在search.exclude中显式配置"**/.git": false才能搜到;files.exclude不支持!语法,仅接受true/false布尔值,且与search.exclude完全独立。

VSCode 里没有“反向匹配隐藏”这回事
你搜到的“反向匹配”大概率是混淆了 search.exclude 的 ! 前缀用法,或者误读了 files.exclude 的行为。VSCode 的 files.exclude(控制侧边栏显示)**只支持布尔值 true 或 false,不支持 ! 语法**。写 "**/*.log": false 不会“反向显示 .log”,它直接被忽略——VSCode 只认 true 表示排除,false 或缺失项等于没配。
想让默认隐藏的目录出现在搜索里?必须显式关掉内置规则
VSCode 搜索默认跳过 .git、.vscode、.DS_Store 等路径,这不是靠 search.exclude 配出来的,而是硬编码在底层逻辑里的。你删掉 "**/.git": true 这一行,它照样不搜。真正生效的方式是:用 false 显式覆盖。
-
"**/.git": false—— 必须写false,不是删掉,也不是留空 -
"**/.vscode": false—— 同理,只改search.exclude,files.exclude不受影响 - 这些规则要放进
.vscode/settings.json或用户settings.json,且必须是合法 JSON 对象 - 改完不用重启,但得重新触发一次全局搜索(Ctrl+Shift+F → 回车)才生效
为什么 !**/.git 在搜索面板里能用,但在 settings.json 里不行?
搜索面板右下角的 «Files to exclude» 输入框支持 ! 前缀,比如填 !**/.git 表示“强制包含 .git 目录”。但这只是临时覆盖,关闭面板就失效,而且它和 search.exclude 是两套机制:! 规则优先级更高,会压倒 settings 里的所有配置。但它不能写进 settings.json —— 那里只接受键值对对象,不接受带感叹号的字符串表达式。
-
search.exclude里写"!**/.git": true❌ 静默无效 - 搜索面板输入框里写
!**/.git✅ 临时生效 - 如果同时在面板里写了
!**/.git,又在 settings 里写了"**/.git": true,前者胜出
真正容易被忽略的点:.env、.editorconfig 这类隐藏文件默认不被搜索排除
很多人以为以 . 开头的文件(如 .env、.prettierrc)也会像 .git 一样被自动跳过,其实不会。VSCode 默认只硬编码屏蔽了少数几个目录名(.git、.vscode),不包括普通隐藏文件。所以如果你搜不到 .env 里的内容,大概率是因为:
- 你没在
search.exclude里加"**/.env": true(想排除它) - 或者你开了
search.useIgnoreFiles,而.gitignore里恰好写了.env—— 这时它被.gitignore拦住了,不是 VSCode 默认行为 -
files.exclude和search.exclude必须分开配:想让它不在侧边栏出现,配"**/.env": true到files.exclude;想让它不参与搜索,得单独加到search.exclude


















