如何在 vscode 中正确注入语法扩展(所以它可以工作)?

cra*_*ked 2 grammar textmate code-injection visual-studio-code

我真的很难扩展 shell-script 语法,因为它只突出显示 bash 内置命令。我想基本上突出显示 shell 命令,而不仅仅是内置命令。为此,我尝试通过注入来扩展语法,但这并没有很好的文档记录,因此无论我在做什么,我都一遍又一遍地遇到相同的问题。如果我注入一些命令以被识别为函数(并因此突出显示),它们是,但它们也在注释中突出显示,这非常烦人。无论我尝试了哪些组合,我都不会摆脱它。由于 support.function.extended.shell 令牌始终是注入的最高值,因此它始终是彩色的。有什么解决办法吗???

正如你在图片中看到的,像“echo”这样的内置命令在注释中没有着色,就像它应该是

{
    "scopeName": "shellcommand.injection",
    "injectionSelector": "L:source.shell -support.function.builtin.shell",
    "patterns": [{
        "include": "#shell-commands"
    }],
    "repository": {
        "shell-commands": {
            "patterns": [{

                "match": "(?<=^|;|&|\\s)(systemctl|cp|sed|awk)(?=\\s|;|&|$)",
                "name": "support.function.extended.shell"

            }]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后输出看起来像这样......

在此处输入图片说明

Mat*_*ner 5

您可能需要一个更具体的注入选择器。尝试针对更具体的范围(不包括评论的范围)或从选择器中排除评论。我认为第二个更适合您的示例。只需-为此使用否定选择器:

"injectionSelector": "L:source.shell -support.function.builtin.shell -comment"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明