search.exclude 是唯一能持久化保存搜索过滤的配置项,它以对象格式写入 settings.json,键为 glob 模式(如 "**/node_modules")、值必须为 true,区分用户级和工作区级,修改后需重载窗口生效。

search.exclude 是唯一能持久化保存搜索过滤的配置项
VSCode 不会记住你每次在搜索面板里手动填的 Files to exclude,那些只是临时规则,关掉面板就清空。真正能“保存下来反复用”的,只有 search.exclude 这个设置项——它被写进 settings.json 后,每次全局搜索(Ctrl+Shift+F)都会自动生效。
注意:files.exclude 完全不管搜索行为,它只影响左侧资源管理器是否显示文件;.gitignore 和 vscodeignore 也对搜索无效。
-
search.exclude必须是对象格式,每个键是 glob 模式,值必须是true(不能是字符串"true"或false) - 路径必须用正斜杠
/,Windows 下写**\node_modules会被直接忽略 - 推荐统一用
**/xxx开头,比如"**/node_modules": true,才能匹配任意嵌套层级
用户级 vs 工作区级:该存在哪儿?
用户级配置(全局生效)适合放通用规则,比如插件目录、node_modules、日志文件;工作区级(.vscode/settings.json)适合项目私有路径,比如 **/legacy 或 **/vendor。
- 用户级位置:
Ctrl+Shift+P→Preferences: Open Settings (JSON)→ 编辑的是你整个 VSCode 的默认行为 - 工作区级位置:在项目根目录下建
.vscode/settings.json,内容只对该文件夹及子文件夹生效 - 多根工作区中,每个根目录的
.vscode/settings.json独立生效,不会继承父级或用户级配置
常见错误写法导致配置静默失效
写错一条规则,VSCode 不报错也不提醒,只是默默跳过——结果就是你搜出来的还是乱七八糟。
- 写成
"~/.vscode/extensions": true:波浪号~在 glob 中不展开,整条规则无效 - 写成
"node_modules": true:只匹配项目根下的node_modules,monorepo 里的子包全漏掉 - 写成
"**/node_modules/**": true:语法合法但冗余,**/node_modules已包含其全部子内容 - 路径里混入空格或中文逗号:比如
"**/dist", "**/log",会导致第二条被丢弃
改完配置没生效?重载窗口比重启更关键
VSCode 搜索依赖本地缓存索引,改了 search.exclude 后旧结果可能还在,尤其在大型项目里。
- 别等它自动刷新,按
Ctrl+Shift+P→ 输入Developer: Reload Window→ 回车 - 这个操作比完全退出再启动快得多,且保留所有打开的标签页和编辑状态
- 如果仍看到不该出现的文件,先检查搜索面板右下角
⋯ → «Files to exclude»是否非空——它优先级最高,会覆盖search.exclude
**/a/**/b/**/c.js)会让匹配变慢,甚至拖累整个搜索响应。实际用好 **/xxx 和 **/*.ext 就够了,别堆砌。


















