1

I'm writing a new language syntax definition for syntax highlighting in Sublime Text 2. Never having done this before, I've been looking through some theme definitions to see which "theme items" are standard, so as to make my syntax highlighting work well with lots of different themes. But I've found there's basically no standard even for the built in themes!

However, there are some pretty common ones, as far as I can tell: Comment, String, Constant, Keyword, Variable, Support, Storage...

But not all of them even have all of these. It looks like maybe only Comment and String are used in all the themes.

Am I missing any big ones that have widespread theme support? Is there a specification or guideline anywhere for these sorts of things? Or are themes assumed to be at least somewhat language-specific, and I should maybe be writing a new theme to go along with this language?

4

3 回答 3

4

没必要!这些被你称为“主题项目”的神秘实体(非官方 Sublime 文本文档语法定义教程中的“范围” ,该指南还建议使用优秀的PackageDev 插件)实际上由不可或缺的命名约定部分(但很难找到)TextMate 语言语法手册。阅读它,你的所有问题都应该得到解答。

于 2013-06-05T16:07:29.380 回答
3

我已经完成了大量的主题开发工作,试图获得适用于多种语言的东西,我可以很肯定地说标准化很少。是的,有 TextMate 语言语法的命名约定指南,但在这些基本范围内有很多余地。例如,当你写

def my_function(self):

在 Python 中,完整的范围my_function

source.python meta.function.python entity.name.function.python

而 Ruby 中的同一行(没有冒号)是

source.ruby meta.function.method.with-arguments.ruby entity.name.function.ruby

如果您function的主题中有范围选择器,则没有太大不同

{meta.function entity.name.function}

但是def关键字呢?在 Python 中是. storage.type.function.python,但在 Ruby 中是keyword.control.def.ruby. 我可以继续,但我想你已经明白了:)

那么,你会怎么做呢?好吧,您可以随意使用它,并选择对您个人有吸引力的范围,然后设计一个与之相匹配的主题。一切都很好,但人们往往对他们的主题非常挑剔,可能不喜欢你的颜色选择或诸如此类的东西。另一种选择是即兴发挥,但要清楚一致地记录您的范围,以便人们可以修改自己的主题(如果需要)。第三,可能是最好的 IMO,将尝试尽可能接近流行的现有语言,最好是与您的语言相似的语言,以便尽可能翻译范围。例如,如果您正在为 PowerShell 制作语言定义,您会希望尽可能多地从 Bash/Shell 脚本语言定义中复制。

祝你工作顺利,请随意看看我上面链接的霓虹灯主题。它通常涵盖很多语言,特别是几种(它是为 Python 定制的,我目前正在添加到 Ruby 功能中),所以希望你能从那里得到一些想法。

于 2013-06-05T16:14:25.567 回答
2

我也遇到了同样的问题,而且我还注意到没有真正的标准(TextMates Language Grammars Chapter 的命名约定除外。我已经编写了SyntaxHighlightTools来简化这一点(可使用 PackageControl 安装)。

使用此工具集,您可以通过从所有语言文件中收集范围名称来创建一个新的主题文件,或者您可以在一个窗口中打开您希望主题使用的那些语言文件,然后生成新的主题文件。您还可以打开一个或多个主题文件进行输入,其规则将用作新主题文件的基础。

我对反馈感兴趣,如果这合适的话。

Textmate 语言语法部分并未涵盖所有 Sublime Text 2 范围。例如标点符号.*,它在 Sublime Text 中常用,但在本文档中未提及。

于 2013-06-07T19:19:44.620 回答