Sublime 3中的语法高亮 - 突出显示相同数量的开始/结束字符

时间:2018-02-19 22:44:21

标签: sublimetext3

我正在尝试为嵌套表达式突出显示正确的语法。模式是`(重音符号)和' 之间的所有文字都应突出显示,直到有相同数量的`' 字符。例如,所有这些表达式都应该全部突出显示(看起来像双引号实际上是两个单撇号):

`variable'  
`variable_`1''  
`variable_`1'_`1''

问题在于我无法完全突出显示最后一个表达式。第二个下划线未突出显示,因为第一个' 返回正匹配。 (第二个下划线可以是任何字符,因此需要一个通用的解决方案。)现在我有:

<dict>
  <key>begin</key>
  <string>`(?!")</string>
  <key>end</key>
  <string>(?&lt;!")''|'</string>
  <key>name</key>
  <string>string.quoted.single.stata</string>
</dict>

括号内的表达式是需要保留的前瞻和后瞻。

1 个答案:

答案 0 :(得分:1)

我为不同的语法编写了一个TextMate语法,其变量可以嵌套为${var1${var2}}。使用正则表达式是可能的,但是您只能处理指定的嵌套级别,因为正则表达式不是递归的。

对于任意嵌套变量,$self子模式取得了更多成功。

<!-- Variables with nested variables -->
<key>VariableNested</key>
<dict>
    <key>begin</key>
    <string>\$\{</string>
    <key>end</key>
    <string>\}</string>

    <key>patterns</key>
    <array>
        <!-- recursive match on $self -->
        <dict>
            <key>include</key>
            <string>$self</string>
        </dict>
        <!-- the variable name inside the brackets -->
        <dict>
            <key>match</key>
            <string>[^}]</string>
            <key>name</key>
            <string>variable</string>
        </dict>
    </array>
</dict>

我认为你可以为了你的目的修改它。

<!-- Variables with nested variables -->
<key>VariableNested</key>
<dict>
    <key>begin</key>
    <string>`</string>
    <key>end</key>
    <string>'</string>

    <key>patterns</key>
    <array>
        <!-- recursive match on $self -->
        <dict>
            <key>include</key>
            <string>$self</string>
        </dict>
    </array>
</dict>

这是TextMate manual的链接,他们简要地(!)解释了一些事情。