在编写Sublime Text语法定义时,如何使用“include”将规则应用于捕获?

时间:2014-02-27 15:48:40

标签: regex syntax-highlighting sublimetext3

我正在尝试在Sublime Text 3中为Gradle编写语法定义.Gradle构建文件的许多部分实际上只是Groovy,所以我试图通过使用{{1来利用当前的Groovy突出显示支持}}。到目前为止,这一点工作得相当好,因为我一直坚持如何将它应用到特定的部分。

以下是我要强调的Gradle片段:

include

这是我用来匹配该片段的语法:

task copyTask (group: 'Install NGA - deploy', type: Copy, dependsOn: 'whoCares') {
   from 'resources'
   into 'target'
   include('**/*.txt')
}

大部分内容似乎都符合预期。 (总是很难用RegEx知道。)我的问题是第三次捕获。我想将 all 将'source.groovy'中包含的规则应用到括号之间的文本中,而我上面的内容并没有完成工作。

澄清:文本被“捕获”并标记为source.groovy,但这实际上并不是我想要的。我不希望它简单地标记为source.groovy,我希望在评估文本时使用source.groovy中的规则。我的示例的最后一行成功地执行了“内容”部分(大括号之间的文本),但简单地使用include不起作用。

- name: copy.task.source.gradle
  begin: '\s*(task)\s+(\w+)\s*\((.*type: Copy.*)\)\s*{'
  comment: 'Copy task definition'
  beginCaptures:
    '1': {name: keyword.task.source.gradle}
    '2': {name: entity.name.function}
    '3': {name: source.groovy}
  end: '}'
  contentName: copy.body.source.gradle
  patterns:
    - include: source.groovy

如果有一种语法直接应用于捕获我无法找到它,我无法弄清楚另一种技术。也许嵌套了'3': {include: source.groovy} # This gets an error. begin标签的东西?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望第三个捕获组source.groovy与您示例中的group: 'Install NGA - deploy', type: Copy, dependsOn: 'whoCares'部分匹配。

在这种情况下,您只需要更改表达式以捕获更多字符串,如下所示:

begin: '\s*(task)\s+(\w+)\s*\((.*type: Copy.*?)\)\s*{'