Glob 模式参考
Visual Studio Code 的许多组件中都使用了 glob 模式。例如:在搜索等功能中设置文件和文件夹的包含/排除规则,在资源管理器中隐藏文件或将其标记为只读,以及设置特定编程语言的文件关联。
Glob 模式语法
VS Code 支持以下 glob 语法
/用于分隔路径片段*匹配路径段中的零个或多个字符?匹配路径段中的一个字符**匹配任意数量的路径段,包括零个{}用于组合条件(例如{**/*.html,**/*.txt}可匹配所有 HTML 和文本文件)[]用于声明要匹配的字符范围(example.[0-9]可匹配example.0、example.1等)[!...]用于排除要匹配的字符范围(example.[!0-9]可匹配example.a、example.b,但不会匹配example.0)
注意:即使在 Windows 上,路径也是使用 / 而不是 \ 来分隔的。但在应用时,glob 模式将匹配斜杠和反斜杠路径。
大小写敏感性
Glob 模式的匹配行为会根据平台的文件系统而有所不同
- Windows 和 macOS:Glob 模式默认不区分大小写。例如,模式
**/MyFolder/**将匹配myfolder/、MyFolder/、MYFOLDER/以及任何其他大小写变体。 - Linux:Glob 模式区分大小写。模式
**/MyFolder/**将仅匹配大小写完全一致的文件夹。
这种基于平台的行为适用于 VS Code 中所有使用 glob 模式的地方,包括
- 搜索视图的包含/排除模式
- files.exclude 设置
- search.exclude 设置
.gitignore文件模式(当启用 explorer.excludeGitIgnore 时)- 搜索编辑器模式
例如,如果你的 .gitignore 文件中有一个类似 build/ 的模式,在 Windows 和 macOS 上它将匹配 build/、Build/、BUILD/ 等大小写变体,但在 Linux 上仅匹配完全一致的名称。这确保了 VS Code 与这些文件系统处理文件和文件夹名称的方式保持一致。
远程开发:当使用远程工作区(如 WSL、SSH 或开发容器)时,glob 匹配行为遵循远程文件系统的大小写敏感性规则,而不是本地客户端的操作系统。
特殊情况
搜索视图中的 glob 模式与 files.exclude 和 search.exclude 等设置中的工作方式不同。在设置中,你必须使用 **/example 来匹配工作区子文件夹 folder1/example 中名为 example 的文件夹。而在搜索视图中,默认会自动补全 ** 前缀。这些设置中的 glob 模式始终是相对于工作区文件夹的路径进行计算的。
常见问题
为什么 glob 模式不支持某某特性?
我们实现了自己的 glob 匹配库,目标是为大多数典型模式提供最佳性能。如果你希望支持特定的 glob 语法,可以提交问题并提供你的使用场景。
为什么我的 glob 模式不起作用?
请确保在 Windows 上使用的是 / 来分隔路径,而不是 \。VS Code 中的 glob 模式要求使用 / 来分隔路径,但它们在匹配时会同时识别路径中的 / 和 \。
如果你想按字面意义匹配 [ 或 ] 等特殊字符,请通过将特殊字符放在方括号内(单字符范围)来进行转义,以避免其被解释为模式匹配符号。反斜杠无法转义这些字符。例如,要匹配 src/routes/post/[id]/ 下的文件,你应该使用模式 src/routes/post/[[]id[]]/**。