我目前正在尝试为新文件类型 (ANTLR) 编写扩展名,并想知道如何更改 Visual Studio Code 中用于语法突出显示的颜色。对我来说,它看起来好像没有在扩展中定义,而是在其他地方。没有颜色的首选项条目,我也没有找到定义它的 CSS 文件(我希望这是因为 vscode 使用的是 Electron)。我还查看了生成的设置文件 vscode 和附带的文件,但也没有任何线索。网络搜索也没有帮助。所以,我现在有点迷路了。
有人可以给我一些提示或指向相关文档吗?
我目前正在尝试为新文件类型 (ANTLR) 编写扩展名,并想知道如何更改 Visual Studio Code 中用于语法突出显示的颜色。对我来说,它看起来好像没有在扩展中定义,而是在其他地方。没有颜色的首选项条目,我也没有找到定义它的 CSS 文件(我希望这是因为 vscode 使用的是 Electron)。我还查看了生成的设置文件 vscode 和附带的文件,但也没有任何线索。网络搜索也没有帮助。所以,我现在有点迷路了。
有人可以给我一些提示或指向相关文档吗?
这里有两个概念:
如果您正在编写自己的语法,或从 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.*
将是绿色的,因此它们都被着色为相同的。
无需修补主题,来自官方文档:
要调整编辑器的语法高亮颜色,请在用户设置 settings.json 文件中使用 editor.tokenColorCustomizations
除了简单的令牌自定义之外,您还可以使用稍微复杂的设置完全覆盖 TextMate 规则,例如:
"editor.tokenColorCustomizations": {"textMateRules": [{
"scope": "keyword.control.ref.latex",
"settings": {
"foreground": "#FF0000"
}
}]}
语法高亮规则存储在.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
您可以考虑使用颜色主题
自VSCode 1.44(2020 年 3 月)以来,您现在拥有
语义令牌的主题支持
颜色主题现在可以编写规则来着色由 TypeScript 等语言扩展报告的语义标记。
"semanticHighlighting": true, "semanticTokenColors": { "variable.declaration.readonly:java": { "foreground": "#00ff00" "fontStyle": "bold" } }
上面的规则定义了 Java 中所有只读变量的声明都应该是贪婪和粗体
有关更多信息,请参阅语义突出显示 Wiki 页面。