如何在 vscode 中正确注入语法扩展(这样就可以了)?

How to properly inject grammar extension in vscode (so it works)?

我很难想扩展 shell-script 语法,因为它只突出显示 bash-builtin 命令。我想基本上突出显示 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"

            }]
        }
    }
}

输出看起来像这样...

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

"injectionSelector": "L:source.shell -support.function.builtin.shell -comment"