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

Ste*_* Lu 37 vim terminal xterm 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=256set term=xterm-256color,现在的颜色通过使用TMUX Vim时工作.

另请注意,我测试了Tmux的两者set -g default-terminal "xterm-256color"set -g default-terminal "screen-256color"设置,此更改对行为没有影响.

rom*_*inl 80

当你不使用tmux或者screen,你只需要配置您的终端仿真器来宣传自己是"能够显示256种颜色的"由他们设置TERMxterm-256color或者与你的终端和平台的工作原理任何可比价值.你如何做到这将取决于终端模拟器,超出了你的问题范围和这个答案.

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

当您使用tmux或者screen,这些程序$TERM通常设置自己的默认值时,screenVim会根据它给出的信息执行它所做的事情.

如果您想要更均匀(和丰富多彩)的行为,则必须将它们配置为使用"更好"的值$TERM:

现在,两个多路复用器都会告诉Vim它们支持256种颜色,而Vim会按照您的预期进行操作.

编辑

我的回答是假设您能够编辑这些配置文件,但是,由于您可以编辑您的配置文件~/.vimrc,我认为我没有那么远.

编辑2

term选项的值(检索到&term)是Vim在启动时拾取的终端的名称.该名称是您应该在终端模拟器中设置的名称.

t_Cooption(&t_Co)的值是Vim认为是主机终端可以显示的最大颜色数.它是根据对应于条目定义$TERMterminfo:

 term            | t_Co
-----------------+------ 
 xterm           | 8
 xterm-256color  | 256
 screen          | 8
 screen-256color | 256
Run Code Online (Sandbox Code Playgroud)

如果Vim启动时,它得到的值TERM的环境变量,查询terminfo与价值的数据库和几个存储了一些关于它的环境信息的t_…变量其中...的可用颜色数量t_Co.给定"合法"终端类型(Vim可以查找的终端类型),Vim 总是假设颜色正确.

设置t_Co256保留term其Vim定义的值 - 或者更一般地说,设置t_Co和/或term与主机终端不匹配的值 - 没有任何意义,并且当Vim发送一个不被理解的信号时可能会产生麻烦终端,反之亦然.

虽然完全有可能这样做,但在Vim中搞乱t_Co并且term完全没用并且可能有害.

再次,只需正确设置终端仿真器和终端多路复用器.这就是你真正需要的一切.

如果您最终在终端多路复用器或终端仿真器中无法定义正确的TERM,那么只有这样才能强制Vim采用256色.为此,改变价值t_Co是唯一有意义的事情:

if &term == "screen"
  set t_Co=256
endif
Run Code Online (Sandbox Code Playgroud)

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

  • 终端模拟器: xterm-256color
  • TMUX /屏幕: screen-256color
  • vim:什么都没有

你完成了

如果你无法控制每一个部分,用一个简单的条件在~/.vimrc设置t_Co根据&term,但不改变的值term.

但是,如果你可以编辑一个~/.vimrc没有理由你不能编辑~/.screenrc~/.tmux.conf~/.bashrc或其他什么.

  • 根据我的经验,我认为这是所有SO答案中最好的答案之一,在我花时间了解终端,它们的颜色系统,vim,tmux和所有这些东西时我不得不通过这些答案.它正确地解释了基础知识,并且我愿意打赌人们使用终端和颜色遇到的问题有一半是因为他们不了解发生了什么(好吧,呃)但愿意盲目地复制他们的shell启动中的粘贴内容脚本和配置文件.这个答案应该加上书签,并希望得到详细阐述.做得好. (5认同)
  • 它是潜在问题的答案.你根本不需要在Vim做任何事情. (2认同)

Jim*_*art 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作为其终端类型发送.

  • `screen-256color`是tmux的[推荐](http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/FAQ)颜色`TERM`.修复tmux中的颜色​​问题就像正确设置它一样容易,而不是试图搞乱特定于vim的黑客攻击.坦率地说,在一个'〜/ .vimrc`中的所有这些恶作剧都绝对没用*. (3认同)