繁体   English   中英

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

[英]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=256set term=xterm-256color ,现在当使用Vim到Tmux时颜色有效。

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

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

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

当你使用tmuxscreen ,这些程序为$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_Coterm既完全没用,也可能有害。

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

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

if &term == "screen"
  set t_Co=256
endif

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

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

你完成了

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

但是如果你可以编辑一个~/.vimrc就没有理由不能编辑~/.screenrc~/.tmux.conf~/.bashrc等等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM