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

时间:2014-05-05 02:11:45

标签: syntax sublimetext2 customization syntax-highlighting

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

<key>match</key>
<string>[0-9]</string>
<key>name</key>
<string>constant.numeric</string>

我的主要问题是:如果文件由Sublime等文本编辑器使用,是否有可以代替constant.numeric的值列表?

2 个答案:

答案 0 :(得分:18)

有关基本介绍,请查看TextMate手册的Language Grammars部分。 Naming Conventions部分介绍了一些基本范围,例如commentkeywordmetastorage等。然后可以将这些类子类化为尽可能详细 - 例如constant.numeric.integer.long.hexadecimal.python。但是,非常重要的是要注意这些不是硬性规则 - 只是建议。当您浏览不同的语言定义时,这将变得很明显,例如,查看功能范围的所有不同方式 - meta.function-callsupport.function.namemeta.function-call punctuation.definition.parameters等。

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

YAML-tmLanguage

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

ScopeAlways

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

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

答案 1 :(得分:14)

是。 .tmlanguage格式最初由TextMate使用。 TextMate manual提供了格式的完整文档,包括可能的语言结构类型。

the relevant docs page复制,采用分层格式:

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