[英]Vim: Difference between t_Co=256 and term=xterm-256color in conjunction with TMUX
我正在测试各种不同的终端,我倾向于使用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"
设置,此更改对行为没有影响。
当您不使用tmux
或screen
,您只需将终端仿真器配置为通过将其TERM
设置为xterm-256color
或任何与您的终端和平台兼容的可比值来宣传自己“能够显示256种颜色”。 你如何做到这将取决于终端模拟器,超出了你的问题范围和这个答案。
你不需要在Vim中做任何事情,因为它完全有能力自己做正确的事情。
当你使用tmux
或screen
,这些程序为$TERM
设置了它们自己的默认值,通常是screen
,Vim会根据它给出的信息做它所做的事情。
如果您想要更加统一(和丰富多彩)的行为,您必须将它们配置为使用$TERM
的“更好”值:
TMUX
将此行添加到~/.tmux.conf
:
set -g default-terminal "screen-256color"
屏幕
将此行添加到~/.screenrc
:
term "screen-256color"
现在,两个多路复用器都会告诉Vim它们支持256种颜色,而Vim会按照您的预期进行操作。
编辑
我的回答是假设您能够编辑这些配置文件,但是,由于您可以编辑~/.vimrc
,我认为我不是那么遥远。
编辑2
term
选项的值(使用&term
检索)是Vim在启动时获取的终端的名称。 该名称是您应该在终端模拟器中设置的名称。
t_Co
选项( &t_Co
)的值是Vim认为是主机终端可以显示的最大颜色数。 它是根据terminfo
$TERM
对应的条目定义的:
term | t_Co
-----------------+------
xterm | 8
xterm-256color | 256
screen | 8
screen-256color | 256
当Vim启动时,它获取TERM
环境变量的值,使用该值查询terminfo
数据库,并在其环境中以多个t_…
变量存储多个信息,其中... t_Co
可用的颜色数。 给定“合法”终端类型(Vim可以查找的终端类型),Vim 总是假设颜色正确。
将t_Co
设置为256
同时将term
设置为其Vim定义的值 - 或者更一般地,将t_Co
和/或term
设置为与主机终端不匹配的值 - 没有任何意义,并且当Vim发送信号时可能会产生麻烦终端不理解,反之亦然。
虽然完全有可能这样做,但在t_Co
弄乱t_Co
和term
既完全没用,也可能有害。
再次,只需正确设置终端仿真器和终端多路复用器。 这就是你真正需要的一切。
如果您最终在终端多路复用器或终端仿真器中无法定义正确的TERM
,那么只有这样您才能强制Vim采用256色。 为此,改变t_Co
的值是唯一有意义的事情:
if &term == "screen"
set t_Co=256
endif
所以...如果你可以配置每个单独的部分:
xterm-256color
screen-256color
你完成了
如果你无法控制每个部分,可以在~/.vimrc
使用一个简单的条件来根据&term
设置t_Co
但不要更改term
的值。
但是如果你可以编辑一个~/.vimrc
就没有理由不能编辑~/.screenrc
或~/.tmux.conf
或~/.bashrc
等等。
您可以同时使用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
作为其终端类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.