【问题标题】:VS Code: How to set semantic syntax coloring like Eclipse does. Default syntax coloring does not do thisVS Code:如何像 Eclipse 一样设置语义语法着色。默认语法着色不这样做
【发布时间】:2018-12-02 07:25:42
【问题描述】:

在 C/C++ 中,在 Eclipse 编辑器中,您可以在更多语言级别设置颜色: 例如函数参数,局部变量可以有不同的颜色。 可以更改静态和全局变量颜色。可以配置宏和宏引用。

如何在 Visual Studio Code 中执行此操作?我不确定 text mate tmLanguage 是否可以实现这一点。我找不到任何文档。

【问题讨论】:

  • 我怀疑 vs 代码进化了这么多:)
  • TextMate 语法仅用于语法着色。对于语义着色,需要一个解析器,它可以在具有相同名称但在不同范围/命名空间中的项目之间有所不同。
  • 这个问题有点含糊,答案似乎采取了语义着色的解释=根据变量是函数、类、常规变量等对变量进行不同的着色。我已经问了一个关于 VS Code 中的语义着色的问题,其中不同的变量颜色不同:stackoverflow.com/questions/61473510/…

标签: eclipse syntax visual-studio-code


【解决方案1】:

[请参阅下文以了解 v1.45 的更改]


您不仅限于主题提供的语义标记突出显示。您可以通过执行以下操作自己为支持的语言语义标记选择颜色和字体样式:

还可以在用户中定义语义主题规则 设置:

"editor.tokenColorCustomizationsExperimental": {
    "property.readonly": {
        "foreground": "#35166d"
    },
    "*.defaultLibrary": {
        "fontStyle": "underline"
    }
}

来自https://github.com/microsoft/vscode/wiki/Semantic-Highlighting-Overview#as-a-theme-author-do-i-need-to-change-my-theme-to-make-it-work-with-semantic-highlighting

特别是请参阅https://github.com/microsoft/vscode/wiki/Semantic-Highlighting-Overview#how-can-i-find-out-what-semantic-tokens-are-available-and-how-they-are-themed,了解如何发现语义标记。例如:

如果没有列出semantic token type,则该语言服务尚不支持它们。但毫无疑问,当他们这样做时,您会想要修改他们的一些颜色和字体样式选择。


vscode 1.45 会将editor.tokenColorCustomizationsExperimental 重命名为editor.semanticTokenColorCustomizations

https://github.com/microsoft/vscode/issues/96267

此语法在 2020 年 4 月的 Insiders' Build 中适用于我:

"editor.semanticTokenColorCustomizations": {
    "enabled": true,
    "rules": {
        "enumMember": "#ff0000"
    },
    "[Default Dark+]": {
        "enabled": true,
        "rules": {
            "variable.readonly": "#ff00ff"
        },
    }
},

来自https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_45.md#semantic-token-styling-in-the-user-settings

语义着色可用于 TypeScript 和 JavaScript,具有 对 Java、C++ 的支持正在开发中。默认情况下启用 内置主题并被主题扩展采用。

editor.semanticTokenColorCustomizations 允许用户否决 主题设置和自定义主题。

为所有主题添加语义样式的示例:```

"editor.semanticTokenColorCustomizations": {
    "enabled": true,
    "rules": {
        "property.readonly": {
          "foreground": "#35166d"
        },
        "*.defaultLibrary": {
            "bold": true
        }
    }
}


上面的设置为所有常量着色#35166d 和所有 默认库中出现的符号(例如MathsetTimeout) 粗体。


为 Dark+ 主题添加语义样式的示例:```

"editor.semanticTokenColorCustomizations": {
    "[Default Dark+]": {
        "enabled": true,
        "rules": {
            "parameter": { "underline": true },
            "*.declaration": { "bold": true }
        }
    }
}

The setting above underlines all parameters in the Dark + theme and
makes all symbol declarations bold.

Theming for semantic tokens is explained in more details in the
[Semantic Highlighting
Guide](/api/language-extensions/semantic-highlight-guide#theming).

奇怪的是,在我的测试中,即使在上面的"editor.semanticTokenColorCustomizations" 中使用了enabled: true,您仍然需要启用此设置:

    "editor.semanticHighlighting.enabled": true

但这是默认设置。

【讨论】:

  • 嗯,我似乎无法在内部人员或默认版本上完成这项工作。我正在查看 .ts 打字稿文件,但在运行检查令牌命令后没有列出“语义令牌类型”。有什么建议吗?
  • 您是否启用了该设置以及您使用的是什么版本的打字稿?我相信它必须是 3.8+。
  • 嗯,工作区有3.8.3,但我的项目依赖较低版本,也许就是这样
【解决方案2】:

你可以阅读更多关于scopes and syntax highlighting colors here的信息。

这是去年在Microsoft/vscode issue 27894 中记录/请求的,由PR 29393 实施。
请参阅 VSCode 1.15 中的“User definable syntax highlighting colors”,修改 color theme


请注意,VSCode 1.42 确实包含 Semantic highlighting for TypeScript & JavaScript

对 TypeScript 和 JavaScript 的语义突出显示支持正在开发中,默认情况下尚未启用。
但是您可以通过添加以下设置来尝试一下:

"editor.semanticHighlighting.enabled": true

启用后,您会看到一些标识符获得了新的颜色和样式,并且现在根据其解析类型突出显示。
语法 (TextMate) 荧光笔将许多标记分类为变量。这些现在变成了命名空间、类、参数等。

您可以在导入部分看到这一点,现在每个导入的符号都用符号的类型着色:

您可以使用Developer: Inspect Editor Tokens and Scopes 命令检查为每个位置计算的语义和语法标记。

editor.semanticHighlighting.enabled 与 2020 年 4 月 1.45 日修订版 editor.semanticTokenColorCustomizations 结合使用(参见 Markanswer),您可以定义所需的语法突出显示。

【讨论】:

    【解决方案3】:

    在撰写本文时,VSCode 内部版本支持语义突出显示 API。

    一个非常简单的例子见semantic tokens sample

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多