VSCode(TextMate)语言语法:默认的样式名称是什么?
简要结论:在 language grammar 内,默认样式的名称是什么?
在 *.tmLanguage.json 语言语法中,匹配到的每个模式都可能覆盖父元素的样式,通过指定一个 name,在此次匹配时叠加在父元素的样式之上。例如,name 可能是类似 "variable.parameter.cpp" 的东西。
VS Code的主题随后为每个 name 指定样式(颜色、字体等)。
我希望在语法的某个元素内部,回到默认样式(不应用来自父元素名称的任何额外样式)。
在标准名称(命名约定部分)中,没有一个名字表示“带默认样式的纯文本”或类似的等价说法。
我查看了 默认的VS Code主题,也没有找到任何能对应此的名字。
或者,是否有办法在 *.tmLanguage.json 语言语法中,指定某些东西以移除所有父元素的名字?
此外,我想避免修改默认主题。这将阻止我在自定义主题中为新名字指定默认样式,并将新名字与该默认样式关联(原因是用户可以保留他们偏好的主题)。
更多细节
Grammars不具备样式,主题才有样式:语法规则有 "name",而主题中有为名称范围指定的样式。 对给定文本应用的作用域和样式,可以通过命令 "Developer: Inspect Editor Tokens and Scopes" 查看。
因此,在我的语法中,应该使用什么名字,才能让主题选择默认的编辑器样式?
示例
C语言注释中的Doxygen标签的语法高亮:
语法 c.tmLanguage.json(摘录):
{
"scopeName": "source.c",
"repository": {
"comments": {
"patterns": [
{
something that matches the // comments
"name": "comment.line.double-slash.documentation.c",
"patterns": [
{
something that matches the Doxygen tags
"name": "storage.type.class.doxygen.c"
在主题 dark_vs.json 中,颜色被指定为:
"scope": [
"storage.type"
],
"settings": {
"foreground": "#ff7b72"
}
如果我想让Doxygen标签应用默认的编辑器样式:
我不能移除 "name": "storage.type.class.doxygen.c",因为作用域选择会回退到 "comment.line.double-slash.documentation.c"(注释的颜色将被应用)。
解决方案
不确定你为什么要重置字体颜色 通常,语法高亮尽量避免使用默认的字体颜色
但你确实要看你正在使用的主题,
很多主题确实有 meta.embedded,会重新应用默认字体颜色,
所以那将是你最好的选择
meta.embedded 也会把 fontStyle 和 standard token type 重置回 other
它通常用于嵌入另一种语言/嵌套特性
否则就简单地使用 variable/variable.other