我正在测试各种不同的终端,我倾向于使用SSH连接到我已经安装了Tmux的Linux机箱。
基本上我注意到了这种行为,我希望有人可以解释发生了什么。现在情况可能是这是影响提示应用程序的特定行为。
我在Tmux中使用Vim,而在我的iPhone5上使用Panic的Prompt应用程序时,当.vimrc
使用set t_Co=256
指令设置颜色时,我有256种颜色未启用的行为。在这里,Vim在未通过Tmux运行时正确显示颜色。另外,OS X的Terminal.app正确地呈现了颜色(我没有在Windows上测试PuTTY,不幸的是)在Tmux中使用了Vim。
然后我为set t_Co=256
换出了set term=xterm-256color
,现在使用Vim通过Tmux时颜色正常。
另请注意,我测试了Tmux的set -g default-terminal "xterm-256color"
和set -g default-terminal "screen-256color"
设置,此更改对行为没有影响。
答案 0 :(得分:79)
如果您不使用tmux
或screen
,则只需将终端模拟器配置为通过将TERM
设置为{来宣传自己为“能够显示256种颜色” {1}}或与您的终端和平台一起使用的任何可比值。你如何做到这将取决于终端模拟器,超出了你的问题范围和这个答案。
你不需要在Vim 中做任何事情,因为它完全有能力自己做正确的事情。
当您使用xterm-256color
或tmux
时,这些程序会为screen
设置自己的默认值,通常是$TERM
,而Vim会根据信息执行的操作给出了。
如果您想要更加统一(且丰富多彩)的行为,则必须将它们配置为对screen
使用“更好”的值:
<强> TMUX 强>
将此行添加到$TERM
:
~/.tmux.conf
<强>屏幕强>
将此行添加到set -g default-terminal "screen-256color"
:
~/.screenrc
现在,两个多路复用器都会告诉Vim它们支持256种颜色,而Vim会按照您的预期进行操作。
修改强> 的
我的回答是假设您能够编辑这些配置文件,但是,由于您可以编辑term "screen-256color"
,我认为我不会那么远。
编辑2
~/.vimrc
选项(使用term
检索)的值是Vim在启动时选择的终端名称。该名称是您应该在终端模拟器中设置的名称。
&term
选项(t_Co
)的值是Vim认为是主机终端可以显示的最大颜色数。它是根据与&t_Co
中的$TERM
对应的条目定义的:
terminfo
当Vim启动时,它获取 term | t_Co
-----------------+------
xterm | 8
xterm-256color | 256
screen | 8
screen-256color | 256
环境变量的值,使用该值查询TERM
数据库并在多个terminfo
个变量中存储其环境中的许多信息其中...... t_…
中可用的颜色数量。给定“合法”终端类型(Vim可以查找的终端类型),Vim 总是采用正确数量的颜色。
将t_Co
设置为t_Co
,同时将256
保留为其Vim定义的值 - 或者更常见的是,将term
和/或t_Co
设置为值与主机终端不匹配 - 毫无意义,当Vim发送终端无法理解的信号时,可能会产生麻烦,反之亦然。
虽然完全有可能这样做,但在Vim中弄乱term
和t_Co
是完全没用的,可能有害。
同样,只需正确设置终端仿真器和终端多路复用器即可。那就是你真正需要的 。
如果你最终进入终端多路复用器或终端仿真器,你无法定义正确的term
,那么只有这样你才能强制Vim采用256色。为此,更改TERM
的值是唯一有意义的事情:
t_Co
所以......如果你可以配置每个部分:
if &term == "screen"
set t_Co=256
endif
xterm-256color
你已经完成了。
如果您无法控制每个部分,请在screen-256color
中使用简单条件根据~/.vimrc
设置t_Co
,但不要更改价值&term
。
但是,如果您可以修改term
,则无法编辑~/.vimrc
或~/.screenrc
或~/.tmux.conf
或其他内容。
答案 1 :(得分:8)
您可以同时使用set t_Co=256
和set term=xterm-256color
。
term
告诉Vim使用哪种终端类型,它控制Vim各方面的显示/渲染,包括如何映射键输入,重绘屏幕,移动光标,显示颜色等。通常情况下, Vim可以通过操作系统提供的TERM
环境变量自行解决这个问题。
在操作系统值不正确的情况下,明确设置它通常很有帮助。如果您从未提供正确值的终端仿真器通过网络连接,则尤其如此。
t_Co
是许多终端选项之一(由Vim用于终端控制的termcap系统使用)。它具体指的是终端支持的颜色数量。如果终端仿真大部分正确,有时你需要覆盖它,但是Vim没有正确识别支持的颜色数。
我在.vimrc
中使用这两个选项,以确保Vim使用我喜欢的所有终端(Ubuntu的gnome-terminal,OSX的iTerm2和Windows的KiTTY)在tmux中使用256种颜色。我还将大多数终端明确配置为发送xterm-256color
作为其终端类型。