Sublime Text tmLanguage文件中的正则表达式不使用多行

我正在尝试创建一个自定义语法语言文件来突出显示并帮助在Sublime Text 2中创建新文档.我已经走了很远,但我在tmLanguage文件中遇到了有关正则表达式搜索的特定问题.我只是希望能够在YAML文档中的多行上匹配正则表达式,然后我将其转换为PList以在Sublime Text中用作包.它不会起作用.

This是我的正则表达式:

/(foo[^.#]*bar)/

这就是它在tmLanguage YAML文档中的内容:

patterns:
- include: '#test'

repository:
  test:
    comment: Tester pattern
    name: constant.numeric.xdoc
    match: (foo[^.#]*bar)

如果我将此YAML构建到tmLanguage文件并将其用作Sublime Text中的包,我将创建一个使用此自定义语法的文档,尝试一下并发生以下情况:

这将匹配:

foo 12345 bar

这将不匹配:

foo
12345
bar

a Regex tester,它们应该并且都将匹配,但在我的tmLanguage文件中它不起作用.

我也已经尝试在tmLanguage文件中为我的正则表达式添加修饰符,但以下要么不起作用要么完全破坏文档:

match: (/foo[^.#]*bar/gm)
match: /(/foo[^.#]*bar/)/gm
match: /foo[^.#]*bar/gm
match: foo[^.#]*bar

Note: My Regex rule works in the tester, this problem occurs in the tmLanguage file in Sublime Text 2 only.

任何帮助是极大的赞赏.

编辑:我使用匹配而不是开始/结束子句的原因是因为我想使用捕获组给它们不同的名称.如果某人有一个带有开头和结尾子句的解决方案,你仍然可以不同地命名’foo’,’12345’和’bar’,那对我来说也没关系.

最佳答案 我发现这是不可能的.这是直接来自
TextMate Manual,这是Sublime Text所基于的文本编辑器.

12.2 Language Rules

<…>

Note that the regular expressions are matched against only a single
line of the document at a time
. That means it is not possible to use a
pattern that matches multiple lines
. The reason for this is technical:
being able to restart the parser at an arbitrary line and having to
re-parse only the minimal number of lines affected by an edit. In most
situations it is possible to use the begin/end model to overcome this
limitation.

我的情况是少数几个开始/结束模型无法克服限制的情况之一.不幸的.

点赞