VSCode搜索的“包含的文件”必须用glob模式且以工作区根为基准,如**/src/utils/**/*.{ts,js};不可用绝对路径、反斜杠或变量;右键“Find in Folder”可自动生成目录glob但需手动加后缀;search.include设路径白名单会忽略面板输入。

在搜索面板填 files to include 时必须用 glob,不能写绝对路径
VSCode 的「包含的文件」输入框只认 glob 模式,且基准是工作区根目录,不是当前打开的文件夹。比如你想搜 src/utils 下所有 .ts 文件,就得填 **/src/utils/**/*.ts,而不是 ./src/utils/**/*.ts 或 D:\myproj\src\utils\**.ts。
常见错误包括:
- 漏掉开头的
**/,只填src/utils/**/*.ts→ 只匹配根目录下的src/utils,monorepo 里packages/foo/src/utils就搜不到 - Windows 用户手误写成反斜杠:
src\utils\**.ts→ 完全不生效,VSCode 只接受正斜杠/ - 把变量当字面量:
${workspaceFolder}/src/utils/**/*.ts→ 搜索面板不解析变量,直接当普通字符串匹配,必然失败
**/src/utils/** 和 **/src/utils/**/*.ts 的区别很关键
前者只限定目录范围,但会扫描该目录下所有后缀的文件;后者才真正同时限定路径 + 后缀。如果你只关心 TypeScript 文件,不填 .ts 后缀,就可能扫到 .js、.md 甚至 .lock 里的匹配内容,徒增干扰。
多个后缀可以叠加写,例如:
-
**/src/utils/**/*.{ts,js,tsx}:匹配三种扩展名(注意花括号语法) -
**/src/utils/**/*.ts,**/src/utils/**/*.tsx:用英文逗号分隔,效果等价 - 想排除某类文件?填到
files to exclude更稳妥,比如**/*.spec.ts
右键「Find in Folder」比手动填更省事,但不支持后缀过滤
在资源管理器中右键目标文件夹 → Find in Folder(快捷键 Win/Linux:Alt+Shift+F,macOS:Option+Shift+F),VSCode 会自动填入类似 **/utils/** 的 glob 到 files to include,省去手输路径的麻烦。
但它默认不限定后缀,所以你仍需手动在 files to include 后追加 *.ts 或改用花括号语法。这个操作是一次性的,关掉搜索面板就失效,适合临时查某个目录,不用动配置。
容易踩的坑:
- 右键后误选了
Reveal in Explorer而不是Find in Folder - 点了
Find in Folder但没在搜索框里输关键词,按回车没反应(得先输内容再回车) - 以为它能自动跳过
node_modules—— 实际上它不管search.exclude,得自己在files to exclude补上**/node_modules/**
想每次打开搜索都默认限定目录 + 后缀?配 search.include
如果项目结构固定,比如始终只在 src 和 tests 下搜,就在项目根目录的 .vscode/settings.json 里加:
{
"search.include": {
"**/src/**": true,
"**/tests/**": true
}
}
这样 Ctrl+Shift+F 打开后,默认就只扫这两个范围,但注意:search.include 不支持后缀过滤,它只管路径。后缀还得靠 files to include 面板输入,或配合 search.exclude 屏蔽不需要的类型(如 "**/*.log": true)。
重要限制:
-
search.include是白名单机制,一旦设了,没列进去的路径就完全不会被扫描,哪怕你手动在面板里填了其他路径也无效(除非删掉该设置) - 它和
files to include面板输入不叠加,而是互斥:有search.include时,面板里的files to include输入会被忽略 - 修改后要重载窗口(
Ctrl+P→ 输入workbench.action.reloadWindow)才能生效
search.include 或面板输入,后缀靠 files to include 里的模式。很多人卡在只设了路径却忘了加后缀,或者反过来,结果要么漏文件,要么噪音太多。


















