Sublime Text:如何自定义语法高亮?

12
我使用 Smarty 来生成 HTML 模板。 我目前使用的是 HTML 高亮,这基本上还不错,但它不会突出显示 Smarty 标签,例如{foreach}。 我尝试安装Smarty包,但看起来效果不太好。
所以说,我需要能够将花括号内的任何内容添加到标准 HTML 着色中来突出显示。怎样才能做到这一点?

这是一个比较模糊的问题,所以我只能模糊地告诉你尝试使用brackethighlighter2。 - AGS
3个回答

26

背景

@MattDMo是正确的,.tmTheme文件是控制高亮的主要文件。它是一个XML文件,包含一系列正则表达式和标记,用于表示哪个RegEx匹配哪种语法元素类型。

您可以在GitHub上搜索并找到许多已经创建了Sublime Text包含.tmTheme文件的人。请注意,您可以直接使用为TextMate创建的软件包,因为Sublime Text使用相同的约定。(至少在.tmTheme.tmPreferences文件方面是这样。)

例如,我能够直接使用为ChucK语言创建的语法高亮软件包,该软件包最初是为TextMate创建的,并在SublimeText2中使用它。通过复制与TextMate一起使用的文件,.tmTheme立即起作用。我只是删除了其他垃圾文件,然后对.tmTheme进行了一些更改,并添加了对包管理器的支持。

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

如何安装新的语法

使用 Package Control 安装

理想情况下,你想要的语法已经可以在 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/

(注意:你可能更喜欢将包克隆到此文件夹中,以便轻松更新。)

如何创建自己的语法

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

注意事项

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

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

出于这个原因,我强烈推荐使用“Monokai”配色方案(特别是“Monokai Soda”变体),它似乎可以“展现出色彩”。


1
如果你想要一个有很多(可自定义)作用域的漂亮对比主题,请查看我的Neon.tmTheme。它是黑底亮色,虽然我主要用于Python,但它与许多其他语言,包括HTML/CSS/JavaScript一起使用也很好看。是的,你说得对,有些颜色方案的作用域不如其他方案多。我从其他方案中整理了一堆作用域到我的主题中,所以希望你能在那里找到一些可以使用的东西。但是,这完全取决于.tmLanguage文件的细粒度程度。 - MattDMo
感谢@MattDMo-我会尝试一下!看起来非常简单干净。而且很高兴知道我的观察是正确的,一些颜色方案可以区分更多/更少的语法范围。 - Nate
上面的“Sublime Text语法定义文档”链接似乎无效。这可能是一个复制/替代链接:https://sublime-text-unofficial-documentation.readthedocs.io/en/stable/extensibility/syntaxdefs.html - awatts

2

您可能需要修改您的.tmTheme,以添加自定义高亮显示,用于将语法设置为Smarty所定义的范围。在Packages/Smarty/Syntaxes目录中应该有一个Smarty.tmlanguage文件。它是XML格式的,因此对于非专业人士来说阅读可能有些困难,但如果您了解正则表达式并且作用域名称命名合理,您应该能够找出如何修改主题。


2

这很简单

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

就这样。享受吧。


2
如果您能解释一下“Packages \ HTML \ HTML.tmLanguage”在哪里或如何在Sublime Text中打开,那就太好了。 我不会心中有这些信息。 - bafromca
2
在Sublime Text的菜单中有一个名为“浏览程序包”的链接。这将打开您的程序包目标文件夹(例如使用Finder或Explorer)。 - svassr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接