5

所以我一直在试图弄清楚如何typedef在崇高的文本中为 C++ 文件中的名称添加语法突出显示。

例如,如果我typedef long long integer;想要integer突出显示(最好是与其他类型相同的颜色:intbool等)。我查看了 C.tmLanuage 文件,并尝试将以下正则表达式代码添加^typedef.*?\s(\w+)\s*;storage.type.c(第 49 行),但它不起作用。如果我添加 word string,它将突出显示单词字符串的所有实例。我尝试进入 C++.tmLanguage 文件,并将正则表达式代码添加到storage.type.c++,但它仍然不起作用。

有人知道如何typedef在崇高的文本中突出显示 's 吗?

另外,有没有办法让类名的语法突出显示?假设我声明了stringor vector,我希望stringorvector被突出显示。

4

1 回答 1

2

如果您有类似的内容,那么该正则表达式将起作用(我相信)typedef foo;为了获得您想要的行为,您必须在 tmLanguage 文件中创建一个稍微复杂的模式条目。由于语言文件是基于 TextMates 的,因此您需要将此作为参考 ( http://manual.macromates.com/en/language_grammars#language_grammars )。我还建议使用PlistJsonConverter(对我来说,使用 JSON 比使用 XML 更容易)。您可能需要定义开始和结束模式(开始可能是typedef结束可能是;)。然后,您可以将所需的任何模式应用于该组。

至于类名突出显示,我会看看是否应用了任何范围。如果没有,您将不得不提出一个正则表达式来将范围应用于这些。然后,您可以添加颜色条目,或使用颜色方案中定义的颜色条目。

编辑:

实际上,它们似乎不是 JSON。我看到()而不是[]。JSON 很容易理解。您可以寻找更深入的内容,但维基百科是一个不错的起点。您可能会感兴趣的是“规则键”部分下的内容。我做了一些搜索(因为我知道那里有一些更好的例子),并遇到了http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html。它从头开始讨论语法定义,但最相关的部分可能是http://docs.sublimetext.info/en/latest/extensibility/syntaxdefs.html#analyzing-patterns. 我没有用于查找类名的正则表达式,因此您必须自己想出一个。如果您还没有,您可能需要四处搜索以查看其他人是否以适合您的方式实现了语言文件。

您将需要从内置的 tmLanguage 文件开始,并将其从 Plist 转换为 json。然后,您可以编辑该文件并将其移回。

于 2013-04-07T21:29:06.030 回答