search.exclude 必须写在 .vscode/settings.json(工作区)或用户 settings.json 中才生效,写在 tsconfig.json、eslint.config.js 或 package.json 中无效;路径为 glob 模式且相对于工作区根目录,如 "**/node_modules": true;修改后需重载窗口或清除索引缓存才能即时生效。

search.exclude 配置在哪写才生效
VSCode 的 search.exclude 必须写在工作区设置(.vscode/settings.json)或用户设置里,写在项目根目录的 package.json 或其他配置文件中完全无效。
常见错误是把排除规则丢进 tsconfig.json 或 eslint.config.js —— 那些只管各自工具链,VSCode 搜索压根不读它们。
- 推荐优先写进
.vscode/settings.json:对当前项目生效,团队协作时可提交,避免每人手动配 - 如果想全局排除(比如所有项目都跳过
node_modules),改用户 settings(Ctrl+, → 右上角打开设置 JSON 图标) - 注意:工作区设置会覆盖用户设置,但仅限该文件夹下生效
路径通配符怎么写才真正匹配到文件夹
search.exclude 的键是 glob 模式,不是正则;值为 true 表示排除。很多人写 "dist/**" 发现没用,其实是路径基准理解错了——它相对于工作区根目录,不是当前打开的文件夹。
典型翻车点:"src/lib/**" 在 monorepo 里可能匹配不到,因为实际路径可能是 packages/my-app/src/lib/。
- 用
**/node_modules而不是node_modules:前者匹配任意层级下的同名文件夹,后者只匹配根目录 - 排除整个文件夹就写
"dist": true,不用加/**—— VSCode 默认递归 - 要排除某类文件但保留文件夹?不行。
search.exclude只管路径,不管后缀;想按扩展名过滤得用files.exclude或搜索时手动填-file:*.log
为什么改了 search.exclude 还是搜出被排除的文件
最常被忽略的是缓存和索引延迟。VSCode 搜索依赖本地索引,修改 search.exclude 后不会立刻刷新已缓存的结果,尤其在大项目里。
现象:Ctrl+Shift+F 搜关键词,结果里仍有 dist/ 下的文件,但 dist/ 明明已在 search.exclude 里。
- 先按
Ctrl+P输入workbench.action.reloadWindow强制重载窗口(比关掉再开快) - 或者删掉
.vscode/.search文件夹(如果存在),让 VSCode 重建索引 - 检查有没有插件干扰:比如某些 Git 插件会强制包含未提交文件,或 Workspace Trust 设置为“受限”导致部分设置被禁用
search.exclude 和 files.exclude 的区别别混用
search.exclude 只影响 Ctrl+Shift+F 全局搜索;files.exclude 影响资源管理器里的文件可见性、以及部分语言服务(如 TypeScript 的路径提示),但它不影响搜索结果。
有人把 "**/build": true 写进 files.exclude 就以为搜索也跳过了——结果一搜全是 build/ 里的旧代码。
- 想让搜索变快、结果干净:必须配
search.exclude - 想让侧边栏清爽、减少语言服务干扰:配
files.exclude - 两者可以重复写同一路径,互不冲突,但作用域完全不同











