【问题标题】:How do I get LUA syntax highlighting inside of XML quotes in Sublime Text 3?如何在 Sublime Text 3 中的 XML 引号内突出显示 LUA 语法?
【发布时间】:2017-02-22 03:18:12
【问题描述】:

我有一种情况,我最终在 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 的字符串 always"%function(self) 开头,并且它们 alwaysend" 结尾,我只是真的想要XML 中的这种突出显示功能。

【问题讨论】:

  • 请您分享一个嵌入了 LUA 的示例 XML 文件,我可以复制和粘贴 - 我将尝试更新语法定义并提供详细的操作步骤:)跨度>
  • Here you go, 非常感谢!

标签: xml lua sublimetext3 syntax-highlighting


【解决方案1】:

第一步是打开 XML 语法定义进行编辑。我将解释如何做到这一点。任何引用 tmLanguage(XML 格式)文件的内容都已过时,Sublime Text 3 现在使用 sublime-syntax(YAML 格式)文件作为默认语法高亮。

我建议克隆官方 git repo https://github.com/sublimehq/Packages (请按照 repo 的自述文件中的说明进行操作,其中详细说明了如何以 Sublime Text 拾取它的方式克隆包),以便您能够包含将来使用 git 对正式版本所做的任何更改到您的版本(因为我们正在使用此自定义版本覆盖将使用 ST 自动升级的默认版本)。 (基本上,您需要 Sublime Packages 文件夹中 repo 中的 XML 文件夹,可以通过导航到 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 语法中复制匹配正则表达式和范围,这并不理想。)

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

【讨论】:

  • 不客气。 :) 我可能遗漏了一些连接点,例如我如何知道使用范围 source.lua - 所以请随时要求澄清 cmets 中的任何内容:)
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 2016-04-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多