全局搜索应使用files to include输入glob模式(如*/.ts)限定.ts或.go文件,而非依赖路径猜测;search.exclude仅影响搜索范围,files.exclude只控制文件树显示,二者作用域不同。

全局搜索时只查 .ts 或 .go 文件,不是靠猜路径
VSCode 默认全局搜索(Ctrl+Shift+F)会扫所有文件,但你真正想改的往往只在源码里。比如 TypeScript 项目里搜 handleError,结果被 node_modules 里成百上千个同名函数淹没——这不是搜索慢,是没过滤对。
正确做法是在搜索面板底部的 files to include 输入框里填 glob 模式:
-
**/*.ts:匹配项目中任意层级的.ts文件 -
src/**/api/*.go:只在src下的api子目录里搜.go文件 -
**/{service,controller}/*.py:用花括号匹配多个目录名(注意 VSCode 1.85+ 才稳定支持)
别写 *.ts ——它只匹配根目录,深层嵌套的文件会被漏掉。
search.exclude 和 files.exclude 完全不是一回事
很多人把这两个配置混着用,结果发现“屏蔽了 dist 目录,但文件树里还是能看到”,或者“搜索结果里还有 .log 文件”。根本原因是:
-
search.exclude:只影响Ctrl+Shift+F全局文本搜索,不改变文件树显示 -
files.exclude:控制资源管理器(左侧文件树)是否显示某些文件或目录,也会影响Ctrl+P快速打开的候选列表
例如,你加了 "**/dist": true 到 search.exclude,但 dist 文件夹仍出现在左侧树里——这是正常的,因为 files.exclude 没配。反之,如果只配了 files.exclude,Ctrl+Shift+F 还是会去 dist 里搜。
临时排除比永久配置更灵活,尤其适合调试阶段
写死在 settings.json 里的规则太重,有时候你只想这次搜 getUser 时跳过测试文件,下次又想看。这时候直接在搜索框里加排除语法:
-
getUser -exclude:tests -exclude:mocks:搜getUser,但跳过含tests或mocks的路径 -
getUser -file:*.d.ts:排除所有声明文件(.d.ts),避免类型定义干扰 - 注意:这些是搜索时临时输入的,不存配置,关掉面板就失效
这种写法优先级高于 search.exclude,适合快速验证逻辑、临时绕过某个构建产物目录,不用改任何 JSON 文件。
glob 模式里最容易踩的坑:双星号 ** 不是万能的
** 看起来很爽,但它的行为和直觉有偏差:
-
**/src/**/*.js:错误写法,**不能连续出现,VSCode 会忽略整条规则 -
src/**.js:错,**后必须跟/或.,否则不递归;应写成src/**/*.js -
**/*.log匹配logs/app.log,但不匹配app.log(根目录下)——要覆盖根目录,得额外加一行*.log
真正安全的写法是分层明确:**/*.log + *.log,或者直接用 **/*.log 配合 search.useIgnoreFiles: true 让它自动读取 .gitignore,省去手动维护。


















