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=256
了set term=xterm-256color
,现在的颜色通过使用TMUX Vim时工作.
另请注意,我测试了Tmux的两者set -g default-terminal "xterm-256color"
和set -g default-terminal "screen-256color"
设置,此更改对行为没有影响.
rom*_*inl 80
当你不使用tmux
或者screen
,你只需要配置您的终端仿真器来宣传自己是"能够显示256种颜色的"由他们设置TERM
到xterm-256color
或者与你的终端和平台的工作原理任何可比价值.你如何做到这将取决于终端模拟器,超出了你的问题范围和这个答案.
你不需要在Vim中做任何事情,因为它完全有能力自己做正确的事情.
当您使用tmux
或者screen
,这些程序$TERM
通常设置自己的默认值时,screen
Vim会根据它给出的信息执行它所做的事情.
如果您想要更均匀(和丰富多彩)的行为,则必须将它们配置为使用"更好"的值$TERM
:
TMUX
将此行添加到~/.tmux.conf
:
set -g default-terminal "screen-256color"
Run Code Online (Sandbox Code Playgroud)屏幕
将此行添加到~/.screenrc
:
term "screen-256color"
Run Code Online (Sandbox Code Playgroud)现在,两个多路复用器都会告诉Vim它们支持256种颜色,而Vim会按照您的预期进行操作.
编辑
我的回答是假设您能够编辑这些配置文件,但是,由于您可以编辑您的配置文件~/.vimrc
,我认为我没有那么远.
编辑2
term
选项的值(检索到&term
)是Vim在启动时拾取的终端的名称.该名称是您应该在终端模拟器中设置的名称.
t_Co
option(&t_Co
)的值是Vim认为是主机终端可以显示的最大颜色数.它是根据对应于条目定义$TERM
在terminfo
:
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_Co
为256
保留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
screen-256color
你完成了
如果你无法控制每一个部分,用一个简单的条件在~/.vimrc
设置t_Co
根据&term
,但不改变的值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
作为其终端类型发送.