You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code扩展开发:如何在tmLanguage的match中嵌入仓库自定义模式

如何在lang.tmLanguage.json中嵌入已定义的模式

在VS Code的Textmate语法定义文件(lang.tmLanguage.json)中,不能直接在match字段的正则表达式里用<#A>这类语法引用已定义模式,需要通过include字段结合begin/end或patterns数组来实现嵌入。

方法一:用begin+end+patterns组合匹配结构

针对你需要的start <#A> <#B>结构,可以这样定义:

{
  "X": {
    "begin": "start\\s+",
    "end": "$",
    "patterns": [
      { "include": "#A" },
      { "include": "#B" }
    ]
  }
}
  • begin匹配开头的start及后续空白字符
  • end匹配行尾,限定匹配范围
  • patterns数组按顺序引用已定义的#A和#B模式,会自动匹配start之后的对应内容

方法二:直接用patterns数组组合模式

如果不需要固定的前后缀,也可以直接把各部分模式组合到patterns里:

{
  "X": {
    "patterns": [
      {
        "match": "start\\s+"
      },
      { "include": "#A" },
      { "include": "#B" }
    ]
  }
}

这种方式会让X模式依次匹配start、#A、#B对应的内容。

处理可选模式(如示例中的<#inheritance>?)

要实现可选匹配的效果,只需给引用的模式添加optional: true属性:

{
  "class-def": {
    "begin": "class\\s+[\\w\\d_]+\\s*",
    "end": "$",
    "patterns": [
      {
        "include": "#inheritance",
        "optional": true
      },
      { "include": "#class-body" }
    ]
  }
}

这样#inheritance对应的模式就会变成可选匹配项,和正则里的?效果一致。


内容的提问来源于stack exchange,提问作者Superior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:42:21