Sublime Text - 修改tmTheme文件

时间:2016-05-24 06:53:17

标签: themes sublimetext3 color-scheme

.tmTheme文件中:

<dict>
    <key>name</key>
    <string>Entity name</string>
    <key>scope</key>
    <string>entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)</string>
    <key>settings</key>
    <dict>
        <key>fontStyle</key>
        <string></string>
        <key>foreground</key>
        <string>#A6E22E</string>
    </dict>
</dict>

下一个范围字符串:

<string>entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)</string>

是一种正则表达式吗?什么适用于这个定义?在同一个文件的另一部分,我可以看到这样的东西:

<string>variable.parameter - (source.c | source.c++ | source.objc | source.objc++)</string>

1 个答案:

答案 0 :(得分:8)

它不是正则表达式;它是从TextMate借来的scope selector

  

可以对范围选择器进行AND,OR和减法,例如:(a | b) & c - d将选择与d不匹配的范围,并与c,a或b匹配。

在Sublime Text中,您可以通过转到Tools菜单 - &gt;找到光标右侧的字符范围。 Developer - &gt; Show Scope Name

为了测试选择器,您可以使用Sublime Text控制台中的view.match_selectorview.find_by_selector APIsView菜单 - &gt; Show Console)。< / p>

查看第一个光标处的范围是否与第一个示例中的选择器匹配的示例:

view.match_selector(view.sel()[0].begin(), 'entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)')

更多信息:

可以使用以下运算符:

  • -:没有,范围内的任何地方(要清楚,这是一个由空格包围的短划线,因为短划线可以出现在范围名称的中间)
  • &:在范围内的任何位置(在.tmTheme文件中,即XML,&应转义为&amp;,除非在CDATA节点内。)
  • space ):with,必须在前一个范围之后(即右边)
  • |,:或者,范围内的任何位置
  • ( ... )可用于将选择器组合在一起

说明:

  • 范围应该只包含字母数字字符和点(.),因此永远不会发生与运算符的冲突。
  • 范围由单个空格分隔。
  • 不需要操作员周围的空白。 (在评估之前修剪/剥离空白。)即string | commentstring|comment相同。
  • 在评估范围选择器之前,前导点和尾随点也会被删除
  • 将连续的空格视为单个空格。
  • 所有范围从一开始就匹配。范围选择器中没有通配符运算符。因此,您无法使用source.python.python等匹配范围*.python
  • 一个完全空的选择器匹配所有内容。但不是在操作员跟随时。即|上的|source将失败,source|也是如此。然而,-有效。 source -a = "hello world" # comment # ^^^^^^^^^^^^^ string.quoted.double # ^^^^^^^^^^^^^ string # ^^^^^^^^^^^^^ string.quoted # ^^^^^^^^^^^^^ string.quoted. # ^^^^^^^^^^^^^ - quoted.double # ^^^^^^^^^^^^^ string - comment # ^^^^^^^^^^^^^ string, comment # ^^^^^^^^^^^^^ string | comment # ^^^^^^^^^^^^^ string & - comment # ^^^^^^^^^^^^^ string & - comment # ^^^^^^^^^^^^^ source string # ^^^^^^^^^^^^^ source & (string - comment) # ^^^^^^^^^^^^^ source - (string & comment) # ^^^^^^^^^^^^^ string & source # ^ source.python string.quoted.double.block.python punctuation.definition.string.begin.python # ^ source & string & punctuation.definition.string.begin.python # ^ string & punctuation & source # ^ string punctuation & source # ^ source punctuation & string # ^ source string punctuation - (punctuation string) # ^ string - source comment - punctuation source # ^ string - source comment - comment # ^ source - python # ^ source - (source & python) # ^ source - (source python) # ^ source.python - source.python.string # ^ source.python.. ..string.. # ^ comment - string # ^ comment # ^ comment, string # ^^^^^^^^^^^^^^^^^^^ comment, string | source # ^ (punctuation | string) & source.python - comment # ^ (punctuation & string) & source.python - comment 将失败。
  • 如果您不确定运算符优先级,请将表达式的部分括在括号中,以使其清晰。但是,在分组后,您似乎需要使用空格以外的运算符,否则将忽略分组后的范围。

实施例

在以下Python代码段中,使用syntax test format,所有测试都将通过,因此它可以作为选择器如何工作的演示:

.tmTheme

请注意,由于scope selector specificity似乎忽略了一些更高级的构造,您可能会发现使用范围选择器创建的"dependencies": { "NUnit": "3.2.1", "NUnitLite": "3.2.1", 规则适用或不适用于您可能适用的情况不要指望。