在Sublime语法文件中,我可以使用以下命令为所有硬括号和其中的所有内容着色:
- match: '\[.*?\]'
scope: keyword.control
如果我想为括号内的所有内容涂上不同的颜色,我尝试过这样的事情:
- match: '\['
scope: variable.function
comment: Images
push:
- meta_scope: constant.numeric
- match: \]
pop: true
问题是它将最后一个括号的颜色与内部的颜色相同。知道如何使最后一个括号与开始括号的颜色相同吗?
答案 0 :(得分:1)
在Syntax documentation中,它表示(强调我的意思):
- meta_scope 。这会将给定范围分配给该上下文中的所有文本,包括将上下文推入堆栈并弹出的模式。
- meta_content_scope 。如上所述,但 不适用于触发上下文的文本 (例如,在上述字符串示例中,内容范围不会应用于引号字符)。
在第二个示例中,您正在使用meta_scope
,这会导致将上下文弹出堆栈的匹配也应用了该范围。如果将其交换到meta_content_scope
,则不会发生。但是,在那种情况下,]
字符根本没有应用任何特定范围,因此它看起来与标准文本颜色相同。
为了解决这个问题,您还可以对其应用与最初推送上下文相同的作用域。例如:
- match: '\['
scope: variable.function
comment: Images
push:
- meta_content_scope: constant.numeric
- match: \]
scope: variable.function
pop: true
从技术上讲,如果您只想获得颜色,则只需要scope
,它就可以满足您的要求。但是,也可以使用meta_content_scope
来“清洁”,以避免可能由于错误的作用域而仍然对其进行着色。