我有一种情况,我最终在 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 中突出显示),但我已经寻找了如何编辑语法文件,老实说,我只是被难住了。一些解决方案甚至似乎建议我需要编辑一个 .tmLanguage
文件,但我找不到任何这些文件,而且没有一个 sublime-syntax
文件看起来就像同一种格式。
如果能让情况变得更简单,包含 LUA 的字符串总是以 "%function(self)
开头并且它们总是结束使用 end"
,我真的只想要 XML 中的这个突出显示功能。
最佳答案
第一步是打开 XML 语法定义进行编辑。我将解释如何做到这一点。任何涉及 tmLanguage
的内容(XML 格式)文件已过时,Sublime Text 3 现在使用 sublime-syntax
(YAML 格式)所有默认语法突出显示的文件。
我建议克隆官方 git 仓库 https://github.com/sublimehq/Packages (请按照 repo 的自述文件中的说明进行操作,其中详细说明了如何以 Sublime Text 提取它的方式克隆包)以便您能够使用 git 将对官方版本所做的任何 future 更改包含到您的版本中(因为我们用这个定制版本覆盖了将自动升级到 ST 的默认版本)。 (基本上,您需要 Sublime 中的存储库中的 XML
文件夹 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 语法中复制匹配正则表达式和范围,这并不理想。)
(您可能想在本地存储库中创建一个新分支,并提交这些更改,以便更容易地合并 future 的官方更改。)
关于xml - 如何在 Sublime Text 3 的 XML 引号内突出显示 LUA 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40013546/