Sublime Text语法定义中的多行突出显示

时间:2015-01-23 17:35:43

标签: regex xml syntax syntax-highlighting sublimetext

我正在尝试创建一个与我的日志中的自定义标头匹配的语法高亮显示器。这是一个例子:

SYSTEM INFORMATION
Memory
----------------------------------------
Total                    14841733120
Free                     12260917248
Active                   583532544
Swap Total               5009104896
Swap Free                5009104896
% Used                   3
% Swap Used              0

Disk
----------------------------------------
Total                    114272681984
Free                     107483385856
% Used                   5

我想要匹配的是标题行(例如,内存)和以下行的短划线。我已经开发了一个正则表达式模式来做到这一点:

^[\w|\ ]+(\ {0,})\n(\-{40})

不幸的是,当我尝试创建自定义语法高亮显示时,此正则表达式不再匹配。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>fileTypes</key>
    <array>
        <string></string>
    </array>
    <key>name</key>
    <string>mylog</string>
    <key>patterns</key>
    <array>
        <dict>
            <key>comment</key>
            <string>section header</string>
            <key>match</key>
            <string>^[\w|\ ]+(\ {0,})\n(\-{40})</string>
            <key>name</key>
            <string>constant.character.mylog</string>
        </dict>
    </array>
    <key>scopeName</key>
    <string>text.mylog</string>
    <key>uuid</key>
    <string>unique-uuid</string>
</dict>
</plist>

有关获取自定义语法高亮显示以匹配两行的任何建议吗?

1 个答案:

答案 0 :(得分:2)

我担心这是不可能的。请参阅TextMate Manual。您不能使用单个正则表达式来匹配跨行。您可以做的最接近的事情可能是使用beginend关键字。看看这是否符合你的喜好?

...
<array>
    <dict>
        <key>begin</key>
        <string>^[A-Z][a-z ]*$</string>
        <key>end</key>
        <string>-{40}</string>
        <key>name</key>
        <string>variable.parameter</string>
    </dict>
</array>
...