升华给括号之间的所有颜色都不同于外部

时间:2018-12-15 00:51:06

标签: sublimetext3 syntax-highlighting

在Sublime语法文件中,我可以使用以下命令为所有硬括号和其中的所有内容着色:

- match: '\[.*?\]'
  scope: keyword.control  

如果我想为括号内的所有内容涂上不同的颜色,我尝试过这样的事情:

- match: '\['
  scope: variable.function
  comment: Images
  push:
    - meta_scope: constant.numeric
    - match: \]
      pop: true

问题是它将最后一个括号的颜色与内部的颜色相同。知道如何使最后一个括号与开始括号的颜色相同吗?

1 个答案:

答案 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来“清洁”,以避免可能由于错误的作用域而仍然对其进行着色。