12

我正在尝试为日志文件创建一个简单的着色,现在可以在代码中包含自定义语言(我在 0.9.2 上)。我创建了一个简单的 .tmLanguage 文件来为字母“q”着色,只是为了启动,但没有成功。

我的新语言 ,log与文件扩展名正确关联,我也可以从 Code 中手动选择它,但不会发生着色。我感觉这与我将模式与什么“范围”相关联,但我不确定。是否有可供选择的有效范围列表?最初我以为我会使用一些通用的东西,例如“评论”来获得一些颜色,但它似乎不起作用。

这是我的 .tmLanguage 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>scopeName</key>
        <string>text.log</string>

        <key>fileTypes</key>
        <array>
            <string>log</string>
        </array>

        <key>name</key>
        <string>Log file</string>

        <key>patterns</key>
        <array>
            <dict>
                <key>match</key>
                <string>q</string>
                <key>name</key>
                <string>comment</string>
            </dict>
        </array>
    </dict>
</plist>

我可能在这里误解了一些东西,所以非常感谢任何帮助:-)

4

3 回答 3

9

您需要使用正则表达式而不是静态字符串来描述模式:

<key>match</key>
<string>q</string>  <- This needs to be a regular expression
<key>name</key>
<string>comment</string>

我为日志文件荧光笔提供了一个更有用的示例。它以不同的颜色为数字、提示、警告和错误着色。识别这些关键字和数字的规则基于正则表达式。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>scopeName</key>
        <string>text.log</string>

        <key>fileTypes</key>
        <array>
            <string>log</string>
        </array>

        <key>name</key>
        <string>Log file</string>

        <key>patterns</key>
        <array>
            <dict>
                <key>match</key>
                <string>\b(?i:(hint|info|information))\b</string>
                <key>name</key>

                <string>info-token</string>
            </dict>                
            <dict>
                <key>match</key>
                <string>\b(?i:(warning|warn))\b</string>
                <key>name</key>
                <string>warn-token</string>
            </dict>
            <dict>
                <key>match</key>
                <string>\b(?i:(Error|Failure|Fail))\b</string>
                <key>name</key>
                <string>error-token</string>
            </dict>
            <dict>
                <key>match</key>
                <string>\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\b</string>
                <key>name</key>
                <string>constant.numeric</string>
            </dict>                                
        </array>
        <key>uuid</key>
        <string>FF0550E0-3A29-11E3-AA6E-0800200C9A77</string>
    </dict>
</plist>

荧光笔给出这样的结果(使用默认主题):

在此处输入图像描述

我没有找到有关可用令牌(如 等)的官方error-token文档constant.numeric。但是有一个文件位于%VSCODE_INSTALLATION%\resources\app\out\vs\languages\markdown\common\tokens.css. 它似乎列出了所有可用的令牌等。创建.tmLanguage文件时将其用作参考。

但请注意:某些主题仅使用基本标记。其他一些主题对许多不同的标记使用相同的颜色。因此,您应该经常针对最常见的主题测试荧光笔,以查看结果是否看起来不错。

您绝对应该访问有关语言语法的页面以了解更多信息。

于 2015-10-29T12:01:40.220 回答
8

我们刚刚发布了一个语言扩展,它为“输出”面板带来了色彩。基本上,它与该线程上的已批准答案执行相同的操作,并添加了text/x-code-output输出面板使用的 mime 类型。

在此处免费获取: https ://marketplace.visualstudio.com/items?itemName=IBM.output-colorizer

来源: https ://github.com/IBM-Bluemix/vscode-log-output-colorizer 请帮忙贡献!错误、功能请求、贡献都欢迎。

以下是它工作的一些屏幕截图:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2016-07-29T20:01:37.377 回答
1

正如@Woshi 所说,您需要正则表达式。

至于通常适用于大多数颜色主题的范围,我会将您链接到此答案。请记住,要获取范围,它需要在带有键“名称”的字典中。

于 2015-10-29T17:00:30.787 回答