12

我使用Smarty生成 html 模板。我目前使用 html 突出显示,这很好,除了它不突出 smarty 标签,例如{foreach} 我尝试安装 Smarty 包,但这看起来不太好。

所以基本上我需要能够将大括号内的任何内容突出显示到标准 HTML 着色中。如何才能做到这一点?

4

3 回答 3

26

背景

@MattDMo 是正确的,.tmTheme文件是控制突出显示的主要文件。它是一个带有一系列正则表达式和标记的 XML 文件,这些正则表达式和标记表示哪个 RegEx 匹配哪种类型的句法元素。

你可以在 GitHub 上搜索,发现很多人已经创建了包含.tmTheme文件的 Sublime Text 包。请注意,您可以直接使用为 TextMate 创建的包,因为 Sublime Text 使用相同的约定。(至少就文件而言,这是正确的.tmTheme.tmPreferences

例如,我可以直接为 ChucK 语言获取一个语法高亮包,最初是为 TextMate 制作的,并使用它 SublimeText2。通过.tmTheme复制与 TextMate 一起使用的文件立即工作。我刚刚删除了额外的垃圾文件,然后对 进行了一些更改.tmTheme,并添加了对包管理器的支持。

在此处查看该项目:https ://github.com/nathanleiby/ChucK.tmbundle 。

如何安装新语法

包装控制

理想情况下,您已经想要的语法包含在 Sublime Text Package Control 中可供下载。在 Package Control 中搜索并直接安装。(如果你还没有Package Control,你必须得到它:https ://github.com/wbond/package_control_channel/ )

手动

如果您下载.tmTheme文件或.tmBundle直接下载文件,则需要将其复制到 ST 中相应的包文件夹中。注意有/Packages文件夹和/Packages/User文件夹。ST2 文档建议复制到后者,因为即使在更新过程中删除/修改了主文件夹中的其他包,也可以保证保留它。

在 OSX 上,该目录是:~/Library/Application Support/Sublime Text 2/Packages/User/

(注意:你可能更喜欢git clone打包到这个文件夹中,这样你可以很容易地更新它。)

如何创建自己的

如果您想深入了解并自定义语法突出显示,这里有几个地方可以开始。

  • 复习你的正则表达式。
  • 语法定义的 Sublime Text 文档
  • <ctrl> + <shift> + p. 每当您查看文件时,选择任何单词并按下此组合键,然后查看页脚栏中。您应该会看到一系列语法描述。例如:我刚刚在我正在查看的 SQL 文件中突出显示了一个单词,响应是:source.sql string.other.quoted.backtick.sql.
  • 您可能更喜欢使用 JavaScript/JSON 而不是 XML 来解析您的语法。使用PackageDev。您可以通过 Package Control 获得此信息。它具有允许您在 .json (JSON) 和 .tmTheme (XML) 文件之间来回切换的命令。
  • StackOverflow 上的一个相关问题

警告

这可能很明显,但语法高亮的用处与您在 Sublime Text 中选择的配色方案有关。(崇高文本 2 -> 首选项 -> 颜色方案 -> ...)

我还没有机会详细探索/验证这一点,但似乎某些配色方案可能会区分更多/更少类型的语法元素。

出于这个原因,我强烈推荐“Monokai”配色方案(特别是“Monokai Soda”变体)——它似乎“带出颜色”。

于 2013-04-08T19:38:27.240 回答
2

您可能需要修改您的.tmTheme以添加自定义突出显示通过将您的语法设置为 Smarty 定义的范围。目录中应该有一个Smarty.tmlanguage文件Packages/Smarty/Syntaxes。它是 XML,因此对于随意阅读可能有点困难,但如果您了解正则表达式并且范围被智能命名,您应该能够弄清楚如何修改您的主题。

于 2013-03-26T22:03:33.720 回答
2

这很简单

  1. 使用 Sublime Text 2 默认安装
  2. 打开文件“Packages\HTML\HTML.tmLanguage”,如果您搜索字符串<!--,您会注意到(当前)有两个对“Smarty”的引用被注释了。取消评论这些。
  3. 在您的Smarty.tmLanguage文件中搜索字符串scopeName. 这实际上是一个键,相关的字符串应该是text.html.smarty.
  4. 将该字符串复制到HTML.tmLanguage代替(您刚刚取消注释的最后一个块末尾source.smarty的键的字符串)include

而已。享受

于 2013-07-22T23:06:13.090 回答