tmlanguage关键字类型是否有任何标准?

Fra*_*ina 9 syntax customization syntax-highlighting sublimetext2

.tmlanguage文件通过定义键值对列表来工作.正则表达式是键,语法的类型是值.这是以下列XML-ish方式完成的:

<key>match</key>
<string>[0-9]</string>
<key>name</key>
<string>constant.numeric</string>
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:是否有一个值列表可以代替constant.numeric 文件编辑器如Sublime使用该文件?

Mat*_*DMo 18

有关基本介绍,请查看TextMate手册的语言语法部分.的命名约定部分描述了一些基作用域,例如comment,keyword,meta,storage,等.然后这些类可以被继承,得到为尽可能详细地-例如,constant.numeric.integer.long.hexadecimal.python.但是,非常重要的是要注意这些不是硬性规则 - 只是建议.-当你扫描通过不同的语言定义看,例如,所有的功能范围的不同的方式,这将变得明显meta.function-call,support.function.name,meta.function-call punctuation.definition.parameters,等.

了解范围的最佳方法是检查现有.tmLanguage文件,查看不同语言的来源,并查看在哪里分配范围.XML格式很难随便浏览,因此我使用优秀的PackageDev插件将XML转换为YAML.然后更容易扫描并查看正则表达式描述的范围:

YAML-tmLanguage

另一种学习方法是查看不同语言结构的范围,我强烈建议使用ScopeAlways.安装并激活后,只需放置光标,状态栏中将显示适用于该特定位置的范围.这在设计颜色方案时特别有用,因为您可以轻松查看哪些选择器将突出显示感兴趣的语言功能.

ScopeAlways

如果您有兴趣,这里使用的配色方案是Neon,我设计的尽可能多的语言看起来尽可能好,涵盖尽可能多的范围.随意查看它,看看如何突出显示不同的语言元素; 这也可以帮助您设计.tmLanguage与其他语言一致的设计.

我希望这一切都有所帮助,祝你好运!


Chr*_*eux 15

是.该.tmlanguage格式最初使用的TextMate.所述TextMate的手册提供了完整的文档的格式,包括可能的类型语言构造.

相关文档页面复制,采用分层格式:

  • comment-征求意见.
    • line-行注释,我们进一步专门化,以便可以从范围中提取注释开始字符的类型
      • double-slash- //评论
      • double-dash- --评论
      • number-sign- #评论
      • percentage- %评论
      • character-其他类型的行注释.
    • block-/* … */和的多行评论<!-- … -->.
      • documentation-嵌入式文档.
  • constant-各种形式的常数.
    • numeric-那些表示数字,例如42,1.3f,0x4AB1U.
    • character-那些表示字符,例如&lt;,\e,\031.
    • escape-像转义序列\econstant.character.escape.
    • language-由语言提供的常数(通常),它们是"特殊"等true,false,nil,YES,NO,等.
    • other-其他常量,例如CSS中的颜色.
  • entity-实体引用文档的较大部分,例如章,类,函数或标记.我们不将整个实体的范围entity.*(我们meta.*用于此).但我们确实使用entity.*较大实体中的"占位符",例如,如果实体是章节,我们将entity.name.section用于章节标题.
    • name-我们正在命名更大的实体.
      • function-函数的名称.
      • type-类型声明或类的名称.
      • tag-标签名称.
      • section-名称是部分/标题的名称.
    • other-其他实体.
      • inherited-class-超类/基类名称.
      • attribute-name-属性的名称(主要在标签中).我们正在命名更大的实体.
  • invalid- "无效"的东西.
    • illegal-非法,例如HTML中的&符号或低于字符(不是实体/标记的一部分).
    • deprecated-对于已弃用的东西,例如使用不推荐使用的API函数或使用严格HTML的样式.
  • keyword-关键字(当这些不属于其他组时).
    • control-主要与流量控制有关,如继续,返回等.
    • operator-运营商可以是文本(例如或)或字符.
    • other-其他关键字.
  • markup-这适用于标记语言,通常适用于较大的文本子集.
    • underline-带下划线的文字.
      • link-这是为了链接,为方便起见,这是markup.underline因为如果没有专门针对的主题规则markup.underline.link那么它将继承下划线样式.
    • bold-粗体文本(strong最好是从这个名称中衍生出来的文本).
    • heading-节标题.可选地提供标题级别作为下一个元件,例如markup.heading.2.html用于<h2>…</h2>在HTML中.
    • italic-斜体文本(具有em阶段性和相似性的文本应优选地从该名称派生).
    • list-列出项目.
      • numbered-编号列表项.
      • unnumbered-未编号的列表项.
    • quote-引用(有时是块引用)文本.
    • raw-逐字的文本,例如代码清单.通常,禁用拼写检查markup.raw.
    • other-其他标记结构.
  • meta-元范围通常用于标记文档的较大部分.例如,其声明的函数的整个线将是meta.function与所述子集将是storage.type,entity.name.function,variable.parameter等,并且只有后者将样式.有时,范围的元部分将仅用于限制样式的更通用元素,但大多数情况下,元范围用于范围选择器以激活包项.例如,在Objective-C中,有一个用于类和实现的接口声明的元作用域,允许相同的制表符触发器根据上下文进行不同的扩展.
  • storage-与"存储"有关的事情.
    • type-某事的类型,class,function,int,var,等.
    • modifier-一个储存调节等static,final,abstract等.
  • string-字符串.
    • quoted-引用字符串.
      • single-单引号字符串:'foo'.
      • double-双引号字符串:"foo".
      • triple-三重引用的字符串:"""Python""".
      • other-其他类型的报价:$'shell',%s{...}.
    • unquoted-像here-docs和here-strings这样的东西.
    • interpolated- "评估"的字符串:`date`,$(pwd).
    • regexp-正则表达式:/(\w+)/.
    • other-其他类型的字符串(应该很少使用).
  • support-框架或库提供的东西应低于支持.
    • function-框架/库提供的功能.例如NSLog在Objective-C中support.function.
    • class-框架/库提供类时.
    • type-框架/库提供的类型,这可能仅用于从C派生的语言,其中包含typedef(和struct).大多数其他语言会引入新类型作为类.
    • constant-框架/库提供的常量(魔术值).
    • variable-框架/库提供的变量.例如NSApp在AppKit中.
    • other-以上内容应该是详尽无遗的,但对于其他一切使用support.other.
  • variable-变量.并非所有语言都允许轻松识别(并因此标记)这些语言.
    • parameter-将变量声明为参数时.
    • language-保留语言变量,如this,super,self,等.
    • other-其他变量,如$some_variables.

  • 有一个更广泛的列表,特定于 Sublime Text,[这里](https://www.sublimetext.com/docs/3/scope_naming.html)。它包括标点符号命名空间。 (2认同)