如何为VS Code创建简单的自定义语言着色

emi*_*ast 9 syntax-highlighting visual-studio-code tmlanguage

我正在尝试为日志文件创建一个简单的着色,现在可以在Code中包含自定义语言(我在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>
Run Code Online (Sandbox Code Playgroud)

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

Wos*_*osi 8

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

<key>match</key>
<string>q</string>  <- This needs to be a regular expression
<key>name</key>
<string>comment</string>
Run Code Online (Sandbox Code Playgroud)

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

<?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>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

但要注意:有些主题只使用基本标记.其他一些主题使用相同的颜色用于许多不同的令牌.因此,您应该经常针对最常见的主题测试荧光笔,以查看结果是否良好.

您一定要访问有关语言语法的页面以了解更多信息.

  • 我提取了一份有效的语言令牌列表,可以在这里找到:https://gist.github.com/vivainio/b89bd60a3f2c7bbb31f7e149d6cb8806 (2认同)

小智 7

我们刚刚发布了一个语言扩展,它将颜色化带到了Output面板.基本上,它与此线程上的已批准答案的作用相同,并添加了text/x-code-output"输出"面板使用的mime类型.

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

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

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

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