在 VS Code 1.79.0-1.80.2 中,Python 文档字符串的颜色与注释类似。如何将其恢复为字符串颜色?

Jon*_*oss 13 syntax-highlighting visual-studio-code

我不知道这是怎么发生的。我对主题所做的一切似乎都不起作用。在重新启动 VS Code 之前,我选择了“Dark Modern”主题,并且 Python 文档字符串与其他字符串的颜色完全相同。重新启动后,仍然选择“黑暗现代”主题,但现在文档字符串是丑陋的深绿色。在主题之间切换不会恢复原始颜色。手动修改主题json文件没有任何作用,而且这种令人讨厌的颜色并不在任何主题文件中。禁用和/或重新启用扩展不会产生任何影响,但禁用 Python 扩展会从语法突出显示中删除多种颜色,但不会删除深绿色。是否使用 venv 没有任何影响。

知道发生了什么或如何解决这个问题吗?

编辑:我找到了罪魁祸首。这家伙决定只改变主题颜色。任务仍然是将其恢复到更改之前的状态。

编辑2:VS Code似乎没有办法区分块注释和文档字符串。在 Python 语言中,它们之间存在语义上的、非语法上的差异。在某种程度上,如果 VS Code 团队不更新他们处理这种语义差异的方式,这个问题是无法治愈的:它将错误地突出显示文档字符串并相同地阻止注释,因此答案是在错误的行为之间进行选择。

sta*_*all 11

注意:正如问题帖子中提到的,此更改是在 PR所有颜色主题中进行的:将注释文档字符串也视为注释 #182162,并且已提出 PR 请求在Revert Python docstring color #184938处恢复更改,该更改标记为处于 2023 年 7 月发布里程碑(现已完成实施)。

首先找出您的主题对字符串使用的颜色,您可以通过编写字符串文字然后使用命令来完成此操作Developer: Inspect Editor Tokens and Scopes,然后将以下内容添加到您的settings.json 文件中:

"editor.tokenColorCustomizations": {
   "[Theme Name Here]": { // TODO trigger suggestions inside the [] if you need help finding your theme's name/ID
      "textMateRules": [
         {
            "scope": "string.quoted.docstring", // use string.quoted.docstring.multi.python if you only want it to apply for python.
            "settings": {
               "foreground": "#FF0000", // TODO
            }
         }
      ]
   }
}
Run Code Online (Sandbox Code Playgroud)

损坏建议的解决方法

在撰写本文时,存在有关各种设置 json 文件的架构加载的错误,这会导致trigger suggestions功能破坏。如果该trigger suggestions功能不起作用,这里是主题别名列表:

  • “深渊”
  • “默认深色+”
  • “默认高对比度灯”
  • “默认高对比度”
  • “默认轻现代”
  • “默认灯光+”
  • 《金比·黑暗》
  • 《物语暗淡》
  • 「莫诺凯」
  • 《安静的光》
  • “红色的”
  • 《日光暗》
  • 《太阳光》
  • 《明晚蓝色》
  • “Visual Studio 2019 黑暗”
  • 《Visual Studio 2019 光》
  • “黑暗视觉工作室”
  • “视觉工作室之光”

如果这些不起作用,您可以尝试使用星号"[*]"或完全删除主题范围(但要知道,为所有主题硬编码一个主题的颜色将无法实现所有主题的所需行为):

    "editor.tokenColorCustomizations": {
        "textMateRules": [
            {
                "name": "Docstrings",
                "scope": "string.quoted.docstring",
                "settings": {
                    "foreground": "#CE9178"
                }
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)