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

如何编写TextMate规则匹配.gabc文件中的GABC/NABC片段?

编写TextMate规则匹配GABC/NABC片段

要给.gabc文件的括号内GABC、NABC片段实现语法高亮,我们可以通过分层的TextMate规则来精准匹配,以下是具体实现方案:

核心思路

先匹配整个括号包裹的区域,再在其中细分三类元素:GABC片段、分隔符|、NABC片段,为每类元素分配独立的scope,后续就能通过theme文件为不同scope设置差异化样式。

完整规则示例(JSON格式)

{
  "scopeName": "source.gabc",
  "patterns": [
    {
      "name": "meta.gabc.bracket-wrapper",
      "begin": "\\(",
      "end": "\\)",
      "beginCaptures": {
        "0": { "name": "punctuation.bracket.gabc.open" }
      },
      "endCaptures": {
        "0": { "name": "punctuation.bracket.gabc.close" }
      },
      "patterns": [
        // 匹配GABC片段:匹配到|或)之前的所有非分隔符内容
        {
          "name": "entity.name.section.gabc",
          "match": "^[^|)]+"
        },
        // 匹配GABC与NABC的分隔符|
        {
          "name": "punctuation.separator.gabc-nabc",
          "match": "\\|"
        },
        // 匹配NABC片段:|之后到)之前的所有内容
        {
          "name": "entity.name.section.nabc",
          "match": "(?<=\\|)[^)]+"
        },
        // 处理纯NABC特殊场景(如(::i+))
        {
          "name": "entity.name.section.nabc",
          "match": "^(::[^)]+)$"
        }
      ]
    }
  ]
}

规则细节解释

  1. 括号匹配:通过begin和end匹配括号的首尾,同时给括号本身分配标点类scope,方便统一样式。
  2. GABC片段匹配:用^[^|)]+匹配括号内开头到|或)的内容,覆盖(c3)这类纯GABC场景。
  3. 分隔符匹配:单独给|分配separator类型的scope,清晰区分两部分内容。
  4. NABC片段匹配:用正向断言(?<=\\|)确保匹配的是|之后的内容,覆盖(f|ta)这类标准场景;额外规则处理(::i+)这类纯NABC的特殊格式。

适配多分隔符场景

如果需要支持括号内多组GABC/NABC交替的场景(如(G1|N1|G2|N2)),可以将内部patterns替换为循环匹配规则:

"patterns": [
  {
    "match": "([^|)]+)(\\|)?",
    "captures": {
      "1": { "name": "entity.name.section.gabc" },
      "2": { "name": "punctuation.separator.gabc-nabc" }
    }
  },
  {
    "match": "([^|)]+)(\\|)?",
    "captures": {
      "1": { "name": "entity.name.section.nabc" },
      "2": { "name": "punctuation.separator.gabc-nabc" }
    }
  },
  {
    "name": "entity.name.section.nabc",
    "match": "^(::[^)]+)$"
  }
]

测试验证

将规则加入VSCode扩展的tmLanguage.json文件后,可通过VSCode的「开发者:检查编辑器令牌和范围」(快捷键Ctrl+Shift+P调出)功能,查看每个片段的scope是否正确匹配,确保高亮逻辑生效。

内容的提问来源于stack exchange,提问作者Laércio de Sousa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:05:21