“文件中排除”不保存是设计如此,仅当次搜索生效;持久化需配置search.exclude到工作区.settings.json或.code-workspace的settings字段中。

VSCode搜索面板里填的“文件中排除”不保存,关掉就丢
VSCode 搜索面板(Ctrl+Shift+F)右上角的「文件中排除」输入框,只对当次搜索生效。填了 **/tests,**/mocks,搜完一关面板,下次打开还是空的——这不是 bug,是设计如此。
常见错误是以为这里能“存个常用配置”,结果每次都要手敲。它优先级高于 search.exclude,适合临时跳过某次重构中的中间目录,但不能替代持久化设置。
- 多个路径用英文逗号分隔,不能用中文逗号或空格
- 支持
!前缀反转(部分 VSCode 版本),比如!**/dist强制包含 dist 下内容 - 输入后按
Enter立即生效,不用点搜索按钮
真正能保存复用的只有 search.exclude 配置项
search.exclude 必须写在工作区根目录下的 .vscode/settings.json 里才对当前项目生效。写在用户级 settings.json 会全局起作用,但无法适配不同项目的结构差异(比如 A 项目有 vendor,B 项目用 gen)。
验证是否生效:打开搜索面板,删掉关键词再输一遍,看结果数量是否立刻变化。没变,说明配置没加载——大概率是打开方式不对(没以工作区形式打开,或路径写错)。
- 路径用正斜杠
/,Windows 用户别粘贴反斜杠\,glob 不识别 -
"**/node_modules"匹配所有层级的node_modules;只写"node_modules"只匹配根目录下那个 - 键名末尾不能带空格,
"**/dist/ ": true这种整个规则会被忽略
多根工作区下 search.exclude 的作用范围是整个工作区
如果你用 .code-workspace 文件打开了多个根目录(比如 frontend 和 backend),search.exclude 写在哪个 .vscode/settings.json 里,就只对那个子文件夹生效。想统一控制,得把配置放在工作区级设置里——也就是 .code-workspace 文件自身的 settings 字段中。
例如,在 my-app.code-workspace 里这样写:
{
"folders": [
{ "path": "frontend" },
{ "path": "backend" }
],
"settings": {
"search.exclude": {
"**/node_modules": true,
"**/dist": true
}
}
}
注意:${workspaceFolder:name} 这类变量在 search.exclude 中无效,只支持静态 glob 模式。
别把 files.exclude 和 search.exclude 搞混
files.exclude 控制左侧资源管理器和 Ctrl+P 快速打开列表,完全不影响 Ctrl+Shift+F 的搜索结果;search.exclude 只管搜索,对资源管理器毫无作用。
有人想“让 node_modules 在侧边栏消失,同时也不出现在搜索里”,就得两个都配:
{
"files.exclude": {
"**/node_modules": true,
"**/dist": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true
}
}
最易被忽略的是:files.exclude 会影响所有插件的文件可见性(比如 Duplicate Finder、ESLint 插件扫描范围),而 search.exclude 只影响搜索面板——这个边界一旦模糊,排查问题就会绕远路。


















