Vim:与TMUX结合使用t_Co = 256和term = xterm-256color之间的差异

时间:2013-03-13 02:29:45

标签: vim terminal tmux xterm

我正在测试各种不同的终端,我倾向于使用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"设置,此更改对行为没有影响。

2 个答案:

答案 0 :(得分:79)

如果您不使用tmuxscreen,则只需将终端模拟器配置为通过将TERM设置为{来宣传自己为“能够显示256种颜色” {1}}或与您的终端和平台一起使用的任何可比值。你如何做到这将取决于终端模拟器,超出了你的问题范围和这个答案。

你不需要在Vim 中做任何事情,因为它完全有能力自己做正确的事情。

当您使用xterm-256colortmux时,这些程序会为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中弄乱termt_Co是完全没用的,可能有害。

同样,只需正确设置终端仿真器和终端多路复用器即可。那就是你真正需要的

如果你最终进入终端多路复用器或终端仿真器,你无法定义正确的term,那么只有这样你才能强制Vim采用256色。为此,更改TERM的值是唯一有意义的事情:

t_Co

所以......如果你可以配置每个部分:

  • 终端模拟器:if &term == "screen" set t_Co=256 endif
  • tmux / screen:xterm-256color
  • vim:没什么

你已经完成了。

如果您无法控制每个部分,请在screen-256color中使用简单条件根据~/.vimrc设置t_Co,但不要更改价值&term

但是,如果您可以修改term,则无法编辑~/.vimrc~/.screenrc~/.tmux.conf或其他内容。

答案 1 :(得分:8)

您可以同时使用set t_Co=256set 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作为其终端类型。