首页 > 解决方案 > 崇高着色括号之间的所有内容与外部颜色不同

问题描述

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

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

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

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

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

标签: sublimetext3syntax-highlighting

解决方案


Syntax documentation中,它这样说(强调我的):

  • 元范围。这会将给定范围分配给此上下文中的所有文本,包括将上下文推入堆栈并将其弹出的模式。
  • 元内容范围。如上所述,但不适用于触发上下文的文本(例如,在上面的字符串示例中,内容范围不会应用于引号字符)。

在您的第二个示例中,您正在使用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,以避免它仍然可能基于错误的范围着色。


推荐阅读