如何在Sublime Text 3中的XML引号内获得LUA语法高亮?

时间:2016-10-13 06:11:51

标签: xml lua sublimetext3 syntax-highlighting

我遇到的情况是我最终在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中强调这一突出显示功能。

1 个答案:

答案 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属性引用(")并从堆栈中“弹出”上下文,返回到纯XML标记内。 (我之前选择查找"没有end,因此end仍然会被LUA语法定义选中。否则我们必须复制匹配正则表达式和范围对于它在XML语法中,这是不理想的。)

(您可能希望在本地仓库中创建一个新分支,并提交这些更改,以便更容易合并未来的官方变更。)

lua inside xml