我正在尝试创建一个自定义语法语言文件来突出显示并帮助在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.
我的情况是少数几个开始/结束模型无法克服限制的情况之一.不幸的.