C#语法高亮着色

4
我能否像在Visual Studio中那样分别更改字段/本地变量的颜色? 以下是在Visual Studio中的样子(字段变量赋值,读写为绿色,本地变量赋值,读写为白色):

Visual Studio Coloring

在VSCode中,本地变量和字段变量的作用域均为"variable.other.object.cs"和"variable.other.readwrite.cs",因此会导致:

enter image description here

(player和anim都是绿色的)

我还想区分静态对象和动态对象,它们都具有“variable.other.object.cs”作用域。

在Visual Studio中,它看起来像这样:

enter image description here

但在VSCode中它看起来像这样:

enter image description here

有什么我可以做的吗? 谢谢

1个回答

5
为了实现您想要的功能,高亮器需要“理解”代码语义。VSCode中的语义高亮于今年早些时候推出,它对语言的支持仍然有限。C#高亮器背后的引擎OmniSharp开始支持基于Roslyn的语义作为实验性特性
您需要首先选择加入以启用该功能,然后重新启动VSCode才能生效。
"csharp.semanticHighlighting.enabled": true,

我假设您知道如何调用作用域检查器,但为了其他读者的方便,它位于 View > Command Pallette > Developer: Inspect Editor Tokens and Scopes
现在您有两个选项来指定自定义突出显示;要么使用新提供的semantic token,要么使用老派的textMateRule 范围。

semantic

语义标记将为您提供一个修饰符(在此示例中为 static)。
"editor.semanticTokenColorCustomizations": {
    "enabled": true,
    "rules": {
        "field.static": {
            "foreground": "#FF0000",
            "fontStyle": "italic",
        },
    },
},

或者,如果您喜欢使用textMateRules,我还没有弄清楚如何指定修改器。

"editor.tokenColorCustomizations": {
    "textMateRules": [
        {
            "scope": "entity.name.variable.field.cs",
            "settings": {
                "foreground": "#FF0000",
                "fontStyle": "italic",
            },
        },
    ]
},

嘿,谢谢!我已经在设置中添加了“csharp.semanticHighlighting.enabled”: true,但是语义标记没有显示出来/改变任何东西。有什么想法吗? - FadeXmusic
有趣。也许尝试显式启用 editor.semanticHighlighting.enabled?(默认情况下应该为 true,但谁知道呢..)另外,请确保 vscode 和 C# 扩展都是最新的。 - NPras
是的,一切都是最新的,而且我在settings.json中设置了"editor.semanticHighlighting.enabled": true。但仍然无法使其正常工作。 - FadeXmusic
那我就没有更多的想法了。它在我所有的三个环境中都可以工作。如果你有另一个系统,也许可以尝试一下,看看它们有什么不同?如果所有的尝试都失败了,也许可以尝试向OmniSharp的开发人员提出问题。 - NPras

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