Glob 模式参考

Visual Studio Code 的许多组件中都使用了 glob 模式。例如:在搜索等功能中设置文件和文件夹的包含/排除规则,在资源管理器中隐藏文件或将其标记为只读,以及设置特定编程语言的文件关联。

Glob 模式语法

VS Code 支持以下 glob 语法

  • / 用于分隔路径片段
  • * 匹配路径段中的零个或多个字符
  • ? 匹配路径段中的一个字符
  • ** 匹配任意数量的路径段,包括零个
  • {} 用于组合条件(例如 {**/*.html,**/*.txt} 可匹配所有 HTML 和文本文件)
  • [] 用于声明要匹配的字符范围(example.[0-9] 可匹配 example.0example.1 等)
  • [!...] 用于排除要匹配的字符范围(example.[!0-9] 可匹配 example.aexample.b,但不会匹配 example.0

注意:即使在 Windows 上,路径也是使用 / 而不是 \ 来分隔的。但在应用时,glob 模式将匹配斜杠和反斜杠路径。

大小写敏感性

Glob 模式的匹配行为会根据平台的文件系统而有所不同

  • Windows 和 macOS:Glob 模式默认不区分大小写。例如,模式 **/MyFolder/** 将匹配 myfolder/MyFolder/MYFOLDER/ 以及任何其他大小写变体。
  • Linux:Glob 模式区分大小写。模式 **/MyFolder/** 将仅匹配大小写完全一致的文件夹。

这种基于平台的行为适用于 VS Code 中所有使用 glob 模式的地方,包括

  • 搜索视图的包含/排除模式
  • files.exclude 在 VS Code 中打开 在 VS Code Insiders 中打开 设置
  • search.exclude 在 VS Code 中打开 在 VS Code Insiders 中打开 设置
  • .gitignore 文件模式(当启用 explorer.excludeGitIgnore 在 VS Code 中打开 在 VS Code Insiders 中打开 时)
  • 搜索编辑器模式

例如,如果你的 .gitignore 文件中有一个类似 build/ 的模式,在 Windows 和 macOS 上它将匹配 build/Build/BUILD/ 等大小写变体,但在 Linux 上仅匹配完全一致的名称。这确保了 VS Code 与这些文件系统处理文件和文件夹名称的方式保持一致。

远程开发:当使用远程工作区(如 WSL、SSH 或开发容器)时,glob 匹配行为遵循远程文件系统的大小写敏感性规则,而不是本地客户端的操作系统。

特殊情况

搜索视图中的 glob 模式与 files.exclude 在 VS Code 中打开 在 VS Code Insiders 中打开 search.exclude 在 VS Code 中打开 在 VS Code Insiders 中打开 等设置中的工作方式不同。在设置中,你必须使用 **/example 来匹配工作区子文件夹 folder1/example 中名为 example 的文件夹。而在搜索视图中,默认会自动补全 ** 前缀。这些设置中的 glob 模式始终是相对于工作区文件夹的路径进行计算的。

常见问题

为什么 glob 模式不支持某某特性?

我们实现了自己的 glob 匹配库,目标是为大多数典型模式提供最佳性能。如果你希望支持特定的 glob 语法,可以提交问题并提供你的使用场景。

为什么我的 glob 模式不起作用?

请确保在 Windows 上使用的是 / 来分隔路径,而不是 \。VS Code 中的 glob 模式要求使用 / 来分隔路径,但它们在匹配时会同时识别路径中的 /\

如果你想按字面意义匹配 [] 等特殊字符,请通过将特殊字符放在方括号内(单字符范围)来进行转义,以避免其被解释为模式匹配符号。反斜杠无法转义这些字符。例如,要匹配 src/routes/post/[id]/ 下的文件,你应该使用模式 src/routes/post/[[]id[]]/**

© . This site is unofficial and not affiliated with Microsoft.