33

我目前正在尝试为新文件类型 (ANTLR) 编写扩展名,并想知​​道如何更改 Visual Studio Code 中用于语法突出显示的颜色。对我来说,它看起来好像没有在扩展中定义,而是在其他地方。没有颜色的首选项条目,我也没有找到定义它的 CSS 文件(我希望这是因为 vscode 使用的是 Electron)。我还查看了生成的设置文件 vscode 和附带的文件,但也没有任何线索。网络搜索也没有帮助。所以,我现在有点迷路了。

有人可以给我一些提示或指向相关文档吗?

4

4 回答 4

27

这里有两个概念:

  • 语言语法,将文本文件转换为具有不同范围的标记,以及
  • 主题,以(希望)令人赏心悦目的方式为这些范围着色。

如果您正在编写自己的语法,或从 TextMate 等进行转换,那么您可能使用的范围与主题定义的范围不同。在这种情况下,您定义的标记之间不会有明显的区别,即使它们实际上是定义的。

有两种方法可以解决这个问题。第一个是,使用您的自定义范围扩展主题并根据需要为它们着色。除非每个使用您的语言的人也喜欢您的配色方案,否则这并不是一个好方法。另一种是使用 VSCode 和主题作者已经定义和着色的(有限的)范围。很有可能,您的语言在您选择的主题中看起来不错,在其他主题中也足够好。

举个例子,这里是comment默认深色 VSCode 主题定义的范围。

"name": "Dark Visual Studio",
"settings": [
    {
        "scope": "comment",
        "settings": {
            "foreground": "#608b4e"
        }
    },

这是来自 C++ 语法的等效语言片段:

"comments": {
    "patterns": [
        {
            "captures": {
                "0": {
                    "name": "punctuation.definition.comment.java"
                }
            },
            "match": "/\\*\\*/",
            "name": "comment.block.empty.java"
        },

基本上,该语言根据comment需要在 下定义了多个标记,并且由于主题说这comment.*将是绿色的,因此它们都被着色为相同的。

于 2017-01-07T23:16:09.623 回答
13

无需修补主题,来自官方文档

要调整编辑器的语法高亮颜色,请在用户设置 settings.json 文件中使用 editor.tokenColorCustomizations

除了简单的令牌自定义之外,您还可以使用稍微复杂的设置完全覆盖 TextMate 规则,例如:

"editor.tokenColorCustomizations": {"textMateRules": [{
        "scope": "keyword.control.ref.latex",
        "settings": {
            "foreground": "#FF0000"
        }
    }]}
于 2019-05-22T14:07:03.397 回答
6

语法高亮规则存储在.plist文件中(或者.tmLanguage文件中)。在这些文件中,为语法高亮声明了不同的标记类型:

  • 什么是关键字?
  • 什么是字符串文字?
  • 什么是评论?
  • 等等

在这里查看以获取有关它的更多信息:https ://code.visualstudio.com/Docs/customization/colorizer

您没有在.plist文件中定义颜色!

标记类型和颜色之间的关系在颜色主题声明中完成。

在此处了解更多信息 https://code.visualstudio.com/Docs/customization/themes和此处如何在 Visual Studio Code 中添加主题?

通常,当您尝试扩展 VSCode 时,此文档也很有帮助:https ://code.visualstudio.com/docs/extensionAPI/overview

于 2016-07-01T15:47:07.193 回答
1

您可以考虑使用颜色主题

VSCode 1.44(2020 年 3 月)以来,您现在拥有

语义令牌的主题支持

颜色主题现在可以编写规则来着色由 TypeScript 等语言扩展报告的语义标记。

"semanticHighlighting": true,
"semanticTokenColors": {
    "variable.declaration.readonly:java": { "foreground": "#00ff00" "fontStyle": "bold" }
}

上面的规则定义了 Java 中所有只读变量的声明都应该是贪婪和粗体

有关更多信息,请参阅语义突出显示 Wiki 页面

于 2020-04-06T01:31:07.610 回答