如何在VS Code中为多个主题自定义textMateRules?

14
VS Code 中,我想自定义一些textMateRules,使其适用于多个主题。例如,对于 Atom One DarkDefault Dark+,但不影响任何其他主题,我想让关键字变成斜体。我可以通过分别复制相同的设置两次来实现这一点,以适用于每个主题,如下所示:
  "editor.tokenColorCustomizations": {
    "[Atom One Dark]": {
      "textMateRules": [
        {
          "scope": [ "keyword" ],
          "settings": { "fontStyle": "italic" }
        }
      ]
    },
    "[Default Dark+]": {
      "textMateRules": [
        {
          "scope": [ "keyword" ],
          "settings": { "fontStyle": "italic" }
        }
      ]
    }
  }
如何只需设置一次即可适用于两个?尤其是当多个主题具有相同的规则时,如何避免规则重复?类似以下方案(但无效):
  "editor.tokenColorCustomizations": {
    "[Atom One Dark] [Default Dark+]": {
      "textMateRules": [
        {
          "scope": [ "keyword" ],
          "settings": { "fontStyle": "italic" }
        }
      ]
    }
  }

2
根据您下面的评论,我认为值得更新问题以澄清您想要做的是自定义“Atom One Dark”和“Default Dark+”,而不会影响任何其他主题。 - UrsaDK
4个回答

10

这个Github页面复制以下代码到用户设置中。

首先将此代码复制到用户设置中。

"editor.tokenColorCustomizations": {
  "textMateRules": [
    {
      "scope": [
        //following will be in italic (=FlottFlott)
        "comment",
        "entity.name.type.class", //class names
        "keyword", //import, export, return…
        "constant", //String, Number, Boolean…, this, super
        "storage.modifier", //static keyword
        "storage.type.class.js", //class keyword
      ],
      "settings": {
        "fontStyle": "italic"
      }
    },
    {
      "scope": [
        //following will be excluded from italics (VSCode has some defaults for italics)
        "invalid",
        "keyword.operator",
        "constant.numeric.css",
        "keyword.other.unit.px.css",
        "constant.numeric.decimal.js",
        "constant.numeric.json"
      ],
      "settings": {
        "fontStyle": ""
      }
    }
  ]
}

现在请仔细看,在textMateRules中您需要定义一个scope。在scope数组中,您需要提及您想要修改的选项。然后,在同一scope的setting数组中,您可以添加您的样式,例如,您想要添加fontStyle italic。就像这样。

"editor.tokenColorCustomizations": {
  "textMateRules": [
    {
      "scope": [
        //following will be in italic (=FlottFlott)
        "comment",
        "entity.name.type.class", //class names
        "keyword", //import, export, return…
        "constant", //String, Number, Boolean…, this, super
        "storage.modifier", //static keyword
        "storage.type.class.js", //class keyword
      ],
      "settings": {
        "fontStyle": "italic"
      }
    }
  ]
}

1
我编辑了答案。如果您有理解上的困难,请告诉我。 - Mr.spShuvo
1
我知道你回答中描述的方法,但它会影响所有主题,而不仅仅是我感兴趣的那些。例如,在我的情况下,有 Atom One DarkDefault Dark+ - cateyes
我会将我的 this 改为非斜体,否则它不起作用。你知道为什么吗? - Yogi Arif Widodo
这是我的配置文件 https://gist.github.com/yogithesymbian/c134398c9d5b380bf5d89af8f3878064 - Yogi Arif Widodo

4
如果足够多的人支持 microsoft/vscode#103694 ,Microsoft 将会添加此功能。除非您自定义每个主题,否则无法实现您想要的行为。
{
  "editor.tokenColorCustomizations": {
    "textMateRules": [
      {
        "scope": [ "keyword" ],
        "settings": { "fontStyle": "italic" }
      }
    ]
  }
}

3
VSCode 1.59 开始,它现在支持问题中指定的方式,此外还支持通配符*。请参见扩展主题自定义语法
  "editor.tokenColorCustomizations": {
    "[Atom One Dark] [Default Dark+] [*Monokai*]": {
      "textMateRules": [
        {
          "scope": [ "keyword" ],
          "settings": { "fontStyle": "italic" }
        }
      ]
    }
  }

2

请参考Shuvo先生的答案。您可以这样将其具体化为已加载的主题:

{
"folders": [
    {
        "path": "C:\\Users\\Envs\\django2"
    }
],
"settings": {
    "workbench.colorCustomizations": {
        "activityBar.background": "#580A42",
        "titleBar.activeBackground": "#7B0E5D",
        "titleBar.activeForeground": "#FFFCFE"
    },
    "editor.tabCompletion": "on",
    "editor.tokenColorCustomizations": {
            "[Monokai Classic]": { 
                "textMateRules": 
                [
                    {
                        "scope": "string",
                        "settings": {
                                    "foreground": "#FF9900" ,}
                    }
                ]
            },
        }
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接