如何在 VS Code 中将 TextMate 语法注入到 Markdown 标题中?

Mih*_*hai 5 markdown visual-studio-code tmlanguage vscode-extensions

我想[ ]在 VS Code 的 Markdown 文件中选择语法突出显示。

我可以使用[ ]以下目标regex(?<=\s)\]|\[(?=\s)但是,[ ]当它是标题的一部分时,不会匹配。

作为一个最小的例子,package.json我有以下内容:

"contributes": {
    "grammars": [
        {
            "scopeName": "markdown.todo",
            "path": "./syntaxes/todo.markdown.json",
            "injectTo": ["text.html.markdown"]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后,在todo.markdown.json我有:

{
    "scopeName": "markdown.todo",
    "injectionSelector": "L:text.html.markdown",
    "patterns": [
        { "include": "#item-todo" }
    ],
    "repository": {
        "item-todo": {
            "name": "item.todo",
            "match": "(?<=\\s)\\]|\\[(?=\\s)"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,在 VS Code 中settings.json我使用以下方法应用颜色:

"editor.tokenColorCustomizations": {
    "textMateRules": [
        {
            "scope": "item.todo",
            "settings": {
                "foreground": "#FF0000"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我可以在下面看到它[ ]被选中,但当它在标题内时则不会。

在此输入图像描述

当我检查令牌和范围时,我看到几个textmate scopes. 我不确定这是否相关,但 VS Code 似乎根据范围突出显示了 markdown 标题markup.heading。但是,markup.heading不存在于textmate scopes数组中。

在此输入图像描述

我尝试更改为"injectionSelector": "L:heading.1.markdown"and/ or "injectTo": ["heading.1.markdown"],但无论我指定什么选择器,我似乎都无法[ ]在标题内匹配。