在.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>
答案 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_selector
或view.find_by_selector
APIs(View
菜单 - &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,&
应转义为&
,除非在CDATA节点内。)
( space ):with,必须在前一个范围之后(即右边)|
和,
:或者,范围内的任何位置(
... )
可用于将选择器组合在一起.
),因此永远不会发生与运算符的冲突。string | comment
与string|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",
规则适用或不适用于您可能适用的情况不要指望。