我遇到的情况是我最终在XML字符串中编写了很多LUA,
and it looks quite ugly, to be honest.
能够拥有syntax highlighting for the LUA, since that's the main focus of the file是非常好的。我很确定这是支持的(显然在某些情况下SQL在PHP内部突出显示),但我已经找到了如何编辑语法文件,老实说我只是难倒。有些解决方案甚至似乎建议我需要编辑sublime-syntax
文件,但我找不到任何这些文件,并且"%function(self)
文件都没有看起来像是同一种格式。
如果情况变得更容易,则包含LUA 的字符串始终以end"
开头,而总是以 text-align: right;
结尾,我只想在XML中强调这一突出显示功能。
答案 0 :(得分:1)
第一步是打开XML语法定义进行编辑。我将解释如何做到这一点。引用tmLanguage
(XML格式)文件的任何内容都已过时,Sublime Text 3现在使用sublime-syntax
(YAML格式)文件进行所有默认语法高亮显示。
我建议克隆官方git repo https://github.com/sublimehq/Packages(请按照repo自述文件中的说明进行操作,详细说明如何以Sublime Text选择的方式克隆包,以便您能够使用git将未来对正式版本所做的任何更改包含到您的版本中(因为我们将覆盖使用此自定义版本自动升级ST的默认版本)。 (基本上,您希望来自Sublime XML
文件夹中的repo的Packages
文件夹,可以通过导航到Preferences -> Browse Packages
菜单项从ST访问。)
我们感兴趣的文件是XML/XML.sublime-syntax
。如您所见,它充满了正则表达式。我们最感兴趣的是解析XML属性的地方。
搜索double-quoted-string:
。紧接在此行之下,粘贴以下内容:
- match: '"(?=%function\(self\))'
scope: string.quoted.double.xml punctuation.definition.string.begin.xml
push:
- clear_scopes: true
- match: '"'
scope: string.quoted.double.xml punctuation.definition.string.end.xml
pop: true
- include: scope:source.lua
请注意,第一个字符(-
之前的match
)应该与原来的- match: '"'
对齐。
保存。就是这样!
基本上,我们正在做的是:
"
)之前,它将查找双引号,后跟文字字符串%function(self)
。它使用前瞻来做到这一点,这样就可以include
source.lua
范围,并将%function(self)
文本/代码正确地突出显示为LUA(以及LUA代码的其余部分) clear_scopes: true
来确保LUA代码看起来不像XML文本/属性。"
)并从堆栈中“弹出”上下文,返回到纯XML标记内。 (我之前选择查找"
没有end
,因此end
仍然会被LUA语法定义选中。否则我们必须复制匹配正则表达式和范围对于它在XML语法中,这是不理想的。)(您可能希望在本地仓库中创建一个新分支,并提交这些更改,以便更容易合并未来的官方变更。)