在 VS Code textMateRules 中覆盖 Python f 字符串

Overriding Python f-strings in VS Code textMateRules

在 VS Code 中,我正在寻找一种方法来强制使用特定的 Textmate 规则,覆盖 VS Code 使用的而不是我希望它使用的规则。

我的 VS Code 版本是:

Version: 1.63.0
Commit: 7db1a2b88f7557e0a43fec75b6ba7e50b3e9f77e
Electron: 13.5.2
Chromium: 91.0.4472.164
Node.js: 14.16.0
V8: 9.1.269.39-electron.0

在我的 settings.json 中,我为各种 Textmate 范围设置了自定义颜色覆盖。

特别是,我有这个片段,它的目的是强制对属性名称(“变量”)使用颜色 black,除非它是 f 字符串,在这种情况下我想整个 f 字符串为 green。请注意,我希望整个 f 字符串为绿色(但不是“f”字母)——无论它是否包含属性访问。

{
    "scope": [
        "meta.member.access.python",
    ],
    "settings": {
        "foreground": "#000",
        "fontStyle": ""
    }
},

{
    "scope": [
        "meta.fstring.python",
    ],
    "settings": {
        "foreground": "#007f00",
        "fontStyle": "italic"
    }
},

相反,我得到的是下面的屏幕截图,您可以在其中看到 self.hello 仍然是黑色,并且在检查与这些元素匹配的 Textmate 规则后,我看到它是 meta.member.access.python 确实。

VS Code Textmate rules f-strings

问题是我怎样才能实现我想要的?

当我在 f 字符串中时忽略其他规则的方法或以某种方式组合规则的方法,例如仅当 meta.member.access.python 在 f 字符串中时才使用特定设置?

谢谢。

  {
    "scope": [
      "meta.fstring.python constant.character.format.placeholder.other.python",
      "meta.fstring.python variable.language.special.self.python",
      "source.python meta.fstring.python string.interpolated.python string.quoted.single.python",
      "meta.fstring.python"
    ],
    "settings": {
      "foreground": "#00ff0d",
      "fontStyle": "italic"
    }
  },

无法复现你的状态,不知道你用的是哪个Color Theme,不同的color theme会修改范围和颜色。但是你可以像上面的例子一样覆盖它。