【问题标题】:Why does the 256-color palette change in terminal VIM on OS X?为什么 OS X 上的终端 VIM 中的 256 色调色板会发生变化?
【发布时间】:2012-04-01 18:37:27
【问题描述】:

我一直在玩终端 VIM 的配色方案,发现了一些令人恼火的问题,到目前为止我一直无法解决。

我预计 16 种系统颜色会发生变化。它们显然是可配置的。出于这个原因,我尝试使用 256 色调色板来构建 VIM 配色方案,无论终端的 16 (可配置)系统调色板如何,它都是相同的。

我只使用了 256 种调色板中的颜色,包括背景。但是,我注意到,如果我打开为终端指定不同背景和文本颜色的终端,两个终端中的 VIM 配色方案会出现很大差异。

即使终端具有不同的背景、前景和系统调色板,我在 Ubuntu 上也没有看到类似的行为。

我很乐意接受解释为什么会发生这种情况的答案。

如果有人能告诉我除了为我要使用的每组颜色设置设置特定终端之外的解决方法,我会欣喜若狂。

【问题讨论】:

标签: macos vim terminal


【解决方案1】:

默认情况下,ANSI 终端是 16 色设备,在 gvim 中工作的 Vim 颜色方案在终端中无法正常工作。

某些终端支持 88 或 256 色。你可以通过设置t_Co 告诉 Vim。当然,256 色仍然比你在gvim 中的全 RGB 少。

有一个名为 CSApprox 的 vim 包,由 Matt Wozniski 开发。它允许您使用具有近似颜色的gvim 配色方案。

这是我自己用的。

CSApprox 包含一个文档文件,它比我在这里更好地解释了所有内容。

网址:http://www.vim.org/scripts/script.php?script_id=2390

祝你好运。

附:关于您的问题但是,我注意到,如果我打开为终端指定了不同背景和文本颜色的终端,两个终端中的 VIM 配色方案会出现很大差异。

这听起来像 OSX 终端没有将颜色定义与 256 色 xterm 调色板分开;也就是说,通过操纵它的设置,你正在弄乱调色板或类似的东西。

终端可能应该将 16 色用户可配置的内容与 256 色调色板分开。

【讨论】:

  • 另一个有用的信息,关于支持更多颜色的 ANSI 扩展的来源:mudpedia.org/wiki/Xterm_256_colors
  • 我对CSApprox的了解很久了,但是使用它有两个问题。一是我只使用终端VIM,对GVim没有兴趣。二是我对自己的颜色很挑剔,想选的很具体。
  • CSApprox 不适用于 gvim。它完全适用于不使用 gvim 而是使用终端的用户。只是 gvim 是配色方案应该如何显示的参考模型。如果你对颜色很挑剔(即想要选择 24 个 RGB 位中的每一个),那么我认为你通过 Vim 来做这件事很不走运。您必须通过其首选项机制编辑终端的调色板。
  • 我还可以循环浏览颜色并在终端和我指定的背景颜色上看到它们,这样我就可以看到给定的终端配色方案我得到了什么。颜色是完全不同的。这就是问题。我之前曾浏览过mudpedia页面,这对我有帮助。
  • “终端可能应该将 16 色用户可配置的内容与 256 色调色板分开。”他们是分开的。 Lion Terminal 允许您编辑 ANSI 颜色,但 256 色调色板是固定的。
【解决方案2】:

终端会动态调整一些颜色值,以确保与背景颜色的对比度最小。也许这就是你所看到的。

请附上显示两种不同配色方案的屏幕截图。查看可用颜色的好脚本是256colors2.pl

【讨论】:

    【解决方案3】:

    请张贴屏幕截图,以便我们看到您所看到的。如果不看颜色或比较它们的数值,就很难谈论颜色。

    嗯,我还在使用 10.6.8,所以我从来没有享受过 Terminal.app 显示 256 色的能力。

    但是,AFAIK,它的默认 16 种颜色不是从 X11 调色板中获取的。它们可能在某处被硬编码,并且它们的值无论如何都是用户可配置的。因此,我不知道为什么将默认的 Red 值更改为任何值会改变 Vim 颜色方案的外观。

    但是,Terminal.app(与大多数其他终端仿真器一样)允许您更改 BackgroundTextBoldSelectionCursor 的值。根据您的配色方案的编写方式,其中一些设置可能会覆盖您的配色方案的某些部分,Background,最明显的是。

    我的 Terminal.app 背景与我的 Vim 颜色方案的背景匹配很长时间了,效果很好。好吧,至少对于 16 色终端模拟器。

    【讨论】:

      【解决方案4】:

      256 色模式仍然只是一个索引调色板,与 8 色和 16 色模式相同。应用程序只需从调色板中按索引选择颜色,由终端决定实际是哪种颜色。

      两个不同的终端碰巧为这些索引选择了相同的颜色,这可能是因为在 216 色 RGB 立方体中,每个组件有 6 个级别,因此分配这些颜色的“明显”自然方法是从列表中选择每个(00x330x660x990xcc0xff)。我想大多数终端都会这样做,因此在相同的索引处给出相同的颜色。

      如果两个终端不同,这只是表明他们正在使用其他方法来选择实际颜色。

      【讨论】:

      • 默认的 256 色表在所有终端仿真器上应该基本相同。确切的颜色值可能会有所不同,但默认颜色集有一个“标准”描述。颜色校准也会产生细微的变化。
      【解决方案5】:

      如果您使用的是 iTerm2,那么您可能需要更改它报告的终端类型。

      在您的 iTerm2 Preferences > Profile > Terminal > Report Terminal Type 中,设置为xterm-256color

      【讨论】:

        【解决方案6】:

        在 Terminal.app aka Apple Terminal 中,如果没有明确设置背景颜色,颜色也会发生变化。

        因此,对于您的配色方案,您必须使用Normal 颜色组设置默认背景颜色,例如:

        hi Normal ctermfg=188 ctermbg=234
        

        然后您应该看不到颜色的任何进一步变化。

        注意:我只注意到前景受到影响,大概是为了您不会错过任何重要的输出;)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-07
          • 2018-09-25
          • 2016-01-22
          • 2010-12-05
          • 2010-11-27
          • 2021-02-13
          • 1970-01-01
          • 2018-02-17
          相关资源
          最近更新 更多