HighlightWords Sublime 插件的颜色列表

List of colors for HighlightWords Sublime plugin

我知道如何向 HighlightWords 插件列表添加新颜色。但是我在添加默认选项以外的选项时遇到了问题。

你能帮我在列表中添加更多颜色吗?

这是我目前拥有的:

"colors_by_scope": [
    "string",
    "entity.name.class",
    "variable.parameter",
    "invalid.deprecated",
    "invalid",
    "support.function",
    "source.json meta.structure.dictionary.json comment.line.double-slash.js ",
    "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json constant.language.json "
],

简答

可供您使用的可用范围列表由您当前使用的配色方案决定,因此您需要查看配色方案文件以查看当前可用的范围。

为此,您可以参考您的用户设置以查看 color_scheme 首选项设置的内容,然后使用 PackageResourceViewer 打开该文件并查看它定义的范围。

或者,我的答案底部有示例插件代码,它会尝试加载您当前的配色方案并按名称告诉您所有独特的范围。


旁注: 将您的 Theme 视为您的 Color Scheme 是一个常见的陷阱,但它们是不同的东西; Theme 设置 Sublime 的整体外观(例如选项卡的形状),而 Color Scheme 设置语法高亮颜色。


长答案

作用域与 Sublime 中语法高亮的工作方式相关联,类似于:

  • 当前文件的语法规范使用规则根据文件内容在该类型文件中代表的内容将文件内容分成多个部分
  • 文件的不同部分分配了一个或多个 scopes 来唯一标识它们
  • 配色方案通过为范围分配颜色来为您的代码分配颜色

因此,例如在 HTML 文件中,HTML 语法表示 <html> 中的 html 具有范围 entity.name.tag,但是您的颜色方案说范围 entity.name.tag 应该是红色的。类似地,<> 的范围表明它们是标点符号,配色方案表明标点符号应为白色。

Sublime 使用 tmTheme 格式(取自 TextMate)来指定什么颜色与什么范围相关联。它是 Plist 格式的 XML 格式文件。如果您使用上面提到的 PackageResourceViewer 打开您当前使用的配色方案,您将看到(除其他外)一堆看起来像这样的部分:

<dict>
    <key>name</key>
    <string>Comment</string>
    <key>scope</key>
    <string>comment</string>
    <key>settings</key>
    <dict>
        <key>foreground</key>
        <string>#75715E</string>
    </dict>
</dict>

这表示对于范围comment,文本的前景颜色应该是#75715E。也可以更改字体样式(粗体或斜体)以及背景颜色。

为了省去尝试从 tmTheme 文件的 XML 中挖掘正确信息的麻烦,您可以从菜单中 select Tools > Developer > New Plugin...,然后用下面的python代码替换你看到的存根代码,并在Sublime默认的位置保存为explore_scopes.py

import sublime
import sublime_plugin
import xml.etree.ElementTree as ET

class ExploreScopesCommand(sublime_plugin.WindowCommand):
    def run(self):
        try:
            settings = self.window.active_view().settings()
            scheme = settings.get("color_scheme")
            xml = sublime.load_resource(scheme)
            self.process_scheme(ET.fromstring(xml))
        except:
            sublime.status_message("Error loading color scheme")
            raise

    def process_scheme(self, color_scheme):
        settings = color_scheme.find("./dict/array")
        if settings is None:
            return sublime.status_message("No color scheme settings found")

        scopes = list()
        for child in settings:
            self.get_scope(scopes, child)

        new_view = self.window.new_file()
        new_view.set_scratch(True)
        new_view.set_name("Available Scopes")
        new_view.run_command("append", {"characters": "\n".join(scopes)})

    def get_scope(self, scopes, setting):
        for i in range(0, len(setting), 2):
            if setting[i].tag == "key" and setting[i].text == "scope":
                scopes.append(setting[i + 1].text)

设置好后,您可以将一个键绑定到 explore_scopes 命令,或者只需使用 View > Show ConsoleCtrl+` 打开 Sublime 控制台,然后输入以下内容:

window.run_command("explore_scopes")

这将在当前 window 中打开一个名为 Available Scopes 的新选项卡,它将向您显示当前设置的配色方案中存在的所有范围。您看到的内容取决于您安装的 Sublime 版本以及您设置的配色方案。

正如所写,它支持从当前聚焦在 window(如果有)中的任何文件中提取配色方案。因此,如果您为不同类型的文件设置了不同的配色方案,请在 运行 命令之前 select 正确的文件类型。