为什么在OS X上的终端VIM中256色调色板会变化?

8
我一直在为终端VIM设计颜色方案,但发现一个令人恼火的问题,至今无法解决。
我期望16个系统颜色可以改变。它们显然是可配置的。因此,我尝试使用256色调色板来构建一个VIM颜色方案,使其与终端的16种(可配置)系统颜色调色板无关。
我只使用了256色调色板中的颜色,包括背景。然而,我注意到,如果我打开指定了不同背景和文本颜色的终端,VIM颜色方案在这两个终端中看起来非常不同。
即使终端具有不同的背景、前景和系统颜色调色板,我在Ubuntu上也没有看到类似的行为。
如果有人能告诉我如何解决这个问题,而不是为每组颜色设置单独的终端,我会非常高兴。

1
请确认一下,您正在使用t_Co=256TERM=xterm-256color对吗? - Michael Berkowski
是的,那件事早就处理好了。 :) - toadjamb
这可能是自动调整,就像这里所描述的那样:http://apple.stackexchange.com/questions/29487/is-it-possible-to-disable-terminals-automatic-tweaking-of-colors-in-lion - user755921
如果需要自动调整,这里有一个解决方法:https://github.com/earwin/TruColor - user755921
6个回答

4
默认情况下,ANSI终端是16色设备,适用于gvim的Vim配色方案在终端中无法正常工作。一些终端能够支持88或256种颜色。您可以通过设置t_Co告诉Vim这一点。当然,256种颜色仍然少于gvim中完整的RGB。有一个名为CSApprox的Vim软件包,由Matt Wozniski开发。它允许您使用近似颜色的gvim配色方案。这就是我自己使用的东西。CSApprox包括一个文档文件,比我在这里能更好地解释一切。URL: http://www.vim.org/scripts/script.php?script_id=2390祝你好运。附言:关于您的问题然而,我注意到如果我打开具有不同背景和文本颜色的终端,则两个终端中的VIM配色方案看起来相当不同。 这似乎是OSX终端未将颜色定义与256种颜色的xterm调色板分开,也就是说,通过操作其设置,您正在搞乱调色板或类似的东西。
终端应该将16种可配置颜色与256种颜色的调色板分开。

1
另一个有用的信息是,关于支持更多颜色的 ANSI 扩展来自哪里:http://www.mudpedia.org/wiki/Xterm_256_colors - Kaz
我很久以前就知道了CSApprox,但是使用它有两个问题。一是我只使用终端VIM,对GVim没有兴趣。二是我对我的颜色非常挑剔,希望能够非常具体地选择它们。 - toadjamb
CSApprox 不是为 gvim 设计的。它是专门为那些不使用 gvim 而使用终端的用户设计的。只是 gvIm 是颜色方案应该显示的参考模型。如果你对颜色很挑剔(即想要选择 24 个 RGB 位中的每一个),那么我认为你在 Vim 中无法做到这一点。你必须通过终端首选项机制编辑终端调色板。 - Kaz
1
我还能够循环遍历颜色并在终端和我指定的背景颜色上看到它们,以便我可以查看给定终端颜色方案的效果。这些颜色非常不同,这是问题所在。我之前已经浏览过mudpedia页面,这对我有所帮助。 - toadjamb
我不想从24个RGB位中选择。但是我想确切知道我正在使用哪些颜色并进行微调。使用CSApprox,我不知道要改变一种颜色以获得不同“阴影”需要多少。使用256色调色板的索引,我只需更改到不同的索引。问题是索引的颜色似乎随着配色方案而改变,我不确定原因。我敢猜测我在使用CSApprox时会遇到相同的问题。最后,它就是对我正在使用的相同调色板进行索引。大多数人只是不够关心注意到这个问题。 - toadjamb
1
终端应该将16色用户配置的内容与256色调色板分开保存。它们是分开的。Lion终端可以让您编辑ANSI颜色,但256色调色板是固定的。 - Chris Page

2
终端会动态调整一些颜色值,以确保与背景颜色有足够的对比度。也许这就是你看到的情况。
请附上一个屏幕截图,显示两种不同的颜色方案。用于查看可用颜色的好脚本是256colors2.pl

0
如果您正在使用iTerm2,则可能需要更改其报告的终端类型。
在您的iTerm2首选项>配置文件>终端>报告终端类型中,设置为xterm-256color

0
请提供屏幕截图,这样我们才能看到您所看到的内容。没有看到颜色或比较它们的数值很难谈论颜色。
嗯,我仍然在10.6.8上,所以我从未享受过Terminal.app显示256种颜色的能力。
但是,据我所知,它的默认16种颜色不是从X11调色板中获取的。它们可能在某个地方硬编码,并且它们的值可以由用户配置。因此,我不知道将默认的“红色”值更改为任何值都会改变您的Vim配色方案外观的原因。
然而,Terminal.app(像大多数其他终端仿真器一样)允许您更改“背景”、“文本”、“粗体”、“选择”和“光标”的值。根据您的配色方案编写方式,其中一些设置可能会覆盖您的配色方案的某些部分,尤其是“背景”。
我已经将我的Terminal.app背景与我的Vim配色方案的背景匹配了很长时间,并取得了很好的效果。至少对于一个16色终端仿真器来说是这样的。

0

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

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

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


默认的256色表在所有终端仿真器上应基本相同。确切的颜色值可能会有所不同,但是有一个“标准”的默认颜色集的描述。颜色校准也可能会产生轻微的变化。 - Chris Page

0
在Terminal.app(也称为Apple Terminal)中,如果未显式设置背景颜色,则颜色将发生变化。
因此,使用您的配色方案,您必须使用Normal颜色组设置默认背景颜色,例如:
hi Normal ctermfg=188 ctermbg=234

然后你不应该再看到任何颜色的改变。

注意:我只注意到前景受到影响,可能是为了让你不错过任何重要的输出 ;)


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