Anaconda Package Sublime 中的 Linting 自定义

Linting customization in Anaconda Package Sublime

我正在使用 Sublime 3 的 Anaconda 包,它运行良好。我唯一的问题是 linting 以相同的颜色(白色)突出显示所有类型的错误、警告和 PEP8 建议。我想改变它,所以错误是红色的,警告是黄色的等等......但我不知道该怎么做。我发现 this 资源基本上告诉我向我当前的主题添加一些 XML 代码以更改 linting 颜色,但我尝试这样做,但它什么也没做。

首先,我相信现在主题正在使用 json 而不是 XML,在“.sublime-color-scheme”或“.sublime-theme”类型的文件名中。因此,我找到了一个确实有一个“.tmtheme”文件的自定义主题,并粘贴了给定 here 的 XML 代码,但 linting 仍然完全是白色的。

然后我尝试将此 XML 代码翻译成 json,并将其粘贴到“.sublime-color-scheme”文件中,但又一次,linting 是白色的。准确地说,我将其粘贴到 "rules" :[] 条目中,因为这似乎符合格式。

任何有更多经验的人都可以告诉我我做错了什么,或者给我指出另一种改变棉绒颜色的方法?我知道像 SublimeLinter 这样的包,但我宁愿坚持使用 Anaconda 包的内置 linter,因为它在着色旁边工作得很好。

如您所见,Sublime Text 中有两种不同类型的配色方案:

  1. tmTheme格式,即XMLplist文件。此格式仍受支持,但目前被视为旧文件格式。

  2. sublime-color-scheme格式,即JSON文件。这种格式可以做 tmTheme 格式可以做的所有事情,并且具有 tmTheme 文件没有的额外功能。

NOTE: Despite the name, tmTheme files are color schemes, not Themes. The format is unfortunately named, but in Sublime Text a Theme is an entirely different thing that styles the application look as a whole.

This distinction isn't particularly important here, but it can catch you unaware if you go searching for information because you sometimes end up finding information that doesn't seem to apply to anything.

很难准确地说出您可能做错了什么,因为您没有包含您尝试添加到文件中的内容。一般来说,我希望您在其中添加的任何内容要么有效,要么导致某种错误(弹出窗口或在 Sublime 控制台中),除非包本身存在任何配置问题。

作为补充说明,我不使用此包(或一般的 linters),因此出于测试目的,我测试的 Anaconda 设置是常用的,但以下两个设置除外:

    // The default is "basic", but that seemed too generic for testing
    "anaconda_gutter_theme": "bright",

    // I don't use linters, but I happened to have pylint already installed
    // so this was the path of least resistance.
    "use_pylint": true,

如何将额外的规则添加到您的配色方案首先取决于您的配色方案所在的位置。特别是,如果您创建了自己的自定义配色方案并存储在 User 包中,则这些步骤与您使用其他人提供的配色方案(Sublime Text 或您安装)。

由于大多数人倾向于使用他们从其他地方获得的预先存在的配色方案,我们将首先介绍它。

您链接的页面上给出的颜色规则采用 tmTheme XML 格式,如下所示:

<!-- Anaconda -->
<dict>
  <key>name</key>
  <string>anaconda Error Outline</string>
  <key>scope</key>
  <string>anaconda.outline.illegal</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#FF4A52</string>
      <key>foreground</key>
      <string>#FFFFFF</string>
  </dict>
</dict>
<dict>
  <key>name</key>
  <string>anaconda Error Underline</string>
  <key>scope</key>
  <string>anaconda.underline.illegal</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#FF0000</string>
  </dict>
</dict>
<dict>
  <key>name</key>
  <string>anaconda Warning Outline</string>
  <key>scope</key>
  <string>anaconda.outline.warning</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#DF9400</string>
      <key>foreground</key>
      <string>#FFFFFF</string>
  </dict>
</dict>
<dict>
  <key>name</key>
  <string>anaconda Warning Underline</string>
  <key>scope</key>
  <string>anaconda.underline.warning</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#FF0000</string>
  </dict>
</dict>
<dict>
  <key>name</key>
  <string>anaconda Violation Outline</string>
  <key>scope</key>
  <string>anaconda.outline.violation</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#ffffff33</string>
      <key>foreground</key>
      <string>#FFFFFF</string>
  </dict>
</dict>
<dict>
  <key>name</key>
  <string>anaconda Violation Underline</string>
  <key>scope</key>
  <string>anaconda.underline.violation</string>
  <key>settings</key>
  <dict>
      <key>background</key>
      <string>#FF0000</string>
  </dict>
</dict>

要添加这些规则,我们需要先将它们转换成 sublime-color-scheme JSON 格式,即使您的配色方案是 tmTheme配色方案。用于调整配色方案的方法是在 User 包中创建一个包含附加内容的文件,该文件始终采用 sublime-color-scheme 格式。

将这些规则转换为 sublime-color-scheme 的新 JSON 格式如下所示:

{
    "name": "anaconda Error Outline",
    "scope": "anaconda.outline.illegal",
    "foreground": "#FFFFFF",
    "background": "#FF4A52"
},
{
    "name": "anaconda Error Underline",
    "scope": "anaconda.underline.illegal",
    "background": "#FF0000"
},
{
    "name": "anaconda Warning Outline",
    "scope": "anaconda.outline.warning",
    "foreground": "#FFFFFF",
    "background": "#DF9400"
},
{
    "name": "anaconda Warning Underline",
    "scope": "anaconda.underline.warning",
    "background": "#FF0000"
},
{
    "name": "anaconda Violation Outline",
    "scope": "anaconda.outline.violation",
    "foreground": "#FFFFFF",
    "background": "#ffffff33"
},
{
    "name": "anaconda Violation Underline",
    "scope": "anaconda.underline.violation",
    "background": "#FF0000"
},

根据您的实际配色方案,此处的颜色可能合适也可能不合适,因此您必须对它们进行调整以使它们看起来像您想要的那样。这还需要知道什么分类为 illegalwarningviolation 以及如何设置 Anaconda 的 linting 样式。您的规则可能需要 foregroundbackgroundboth,具体取决于您的设置方式。

有了这些内容,我们就可以开始了。为了进行调整,您需要知道配色方案的名称。您可以通过使用 Preferences > Settings 并查看 color_scheme 设置来获得此信息(如果您使用的是特定于语法的设置,则打开该类型的文件并使用 Preferences > Settings - syntax specific 并获取配色方案从那里)。

我们在这里感兴趣的部分是文件名;我们不关心它可能说它存在于哪个包中,只关心文件本身的名称。我们也不关心文件的扩展名是什么,因为我们假设扩展名无论如何都是 sublime-color-scheme

例如,设置如下,配色方案的名称是Cobalt,这就是我们关心的。

    "color_scheme": "Packages/Color Scheme - Legacy/Cobalt.tmTheme",

使用这个配色方案、上面的配置和一些示例代码,我在缓冲区中看到的结果是这样的:

为了实施新规则,我们需要在以我们的配色方案命名的 User 包中创建一个 sublime-color-scheme 文件。所以在这种情况下会是 Cobalt.sublime-color-scheme。如果你不确定你的 User 包裹在哪里,你可以使用 Preferences > Browse Packages 来找到它。

您创建的文件的内容应如下所示(适当粘贴上面的内容;为简洁起见,我不会在此处再次包含它):

{
    "rules": [
        // Paste the JSON rules above here
    ]
}

保存文件后立即生效。结果是这样的:

假设您使用的是您自己在 User 包中创建的配色方案,这将不起作用,您需要将规则直接添加到您的配色方案文件中User 包。如果您的 User 包中已经有这样的 "patch" 文件,情况也会如此(例如,如果您要为其他内容添加额外的颜色规则)。

如果您的自定义配色方案是 sublime-color-scheme 格式,那么您只需像上面一样将这些规则添加到配色方案的 rules 部分即可使它们生效。

如果您的配色方案是 tmTheme 格式,那么您需要将 XML 版本的设置复制到您的配色方案中。由于文件的 XML 性质,此处的操作方式并不像 sublime-color-scheme 格式的文件那样完全直接。

在这种情况下,您需要注意每个规则都是一个带有特定键的 <dict></dict> 标签,然后检查配色方案以查看它在哪里具有相似的颜色规则并将您的规则注入正确的位置.

一般来说,如果你弄错了,配色方案将被忽略(一切都会变成黑色和白色),你会看到一个错误对话框,告诉你出了点问题。

有关配色方案如何工作、如何应用颜色等的更多信息,请参见此 video series on color schemes in Sublime Text(我是相关视频的作者的免责声明)。