xml - 如何在 Sublime Text 3 的 XML 引号内突出显示 LUA 语法?

标签 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 中突出显示),但我已经寻找了如何编辑语法文件,老实说,我只是被难住了。一些解决方案甚至似乎建议我需要编辑一个 .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 的官方更改。)

lua inside xml

关于xml - 如何在 Sublime Text 3 的 XML 引号内突出显示 LUA 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40013546/

相关文章:

sublimetext - 右括号上的 Sublime 缩进

docker - 如何为 ssl_certificate 动态设置域

java - IndentingXMLStreamWriter.java 的替代方案

c# - 如何使用 .NET XML 序列化序列化正则表达式类型

java - Android 应用程序可在 AVD 上运行但不能在手机上运行?

function - 使用Lua访问功能主体

lua - 将字符串转换为时间戳

syntax-highlighting - Sublime Text 3 ABAP 语法高亮/配色方案

css - 为什么 justify-items 和 justify-self 在 Sublime 中是无效的语法?

javascript - 当没有数据时 document.write 停止工作