代码之家  ›  专栏  ›  技术社区  ›  Steven Lu

Vim:t_Co=256和term=xterm-256颜色与TMUX之间的差异

  •  45
  • Steven Lu  · 技术社区  · 13 年前

    我正在测试各种不同的终端,我倾向于使用这些终端将SSH连接到我设置了Tmux的Linux盒子中。

    基本上我注意到了这种行为,我希望有人能对发生的事情做出解释。现在可能是这种特定的行为影响了Prompt应用程序。

    我在Tmux中使用Vim,在我的iPhone 5上的Panic‘s Prompt应用程序上,当 .vimrc 使用设置颜色 set t_Co=256 指令。在这里,Vim在没有通过Tmux运行时正确地显示了颜色。此外,OS X的Terminal.app在Tmux中使用Vim正确地渲染了颜色(不幸的是,我没有在windows上测试PuTTY)。

    然后我换掉了 设置t_Co=256 对于 set term=xterm-256color 并且现在当使用Vim到Tmux时颜色工作。

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

    2 回复  |  直到 13 年前
        1
  •  96
  •   romainl    12 年前

    当你不使用 tmux screen ,您只需要配置终端模拟器,通过设置其 TERM xterm-256color 或与您的终端和平台配合使用的任何类似价值。你如何做到这一点将取决于终端模拟器,并且不在你的问题和这个答案的范围内。

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

    当您使用 tmux公司 屏幕 ,这些程序为设置自己的默认值 $TERM 通常 屏幕 ,并且Vim对所提供的信息做它必须做的事情。

    如果您想要更统一(和丰富多彩)的行为,则必须将其配置为使用“更好”的值 $期限 :

    • 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            | t_Co
    -----------------+------ 
     xterm           | 8
     xterm-256color  | 256
     screen          | 8
     screen-256color | 256
    

    当Vim启动时,它获得 期限 环境变量,查询 终端 具有该值的数据库,并将有关其环境的许多信息存储在几个数据库中 t_… 变量中可用的颜色数 t_公司 给定一个“合法”的终端类型(Vim可以查找的终端类型),Vim 总是 假设颜色的数量正确。

    背景 t_公司 256 离开时 学期 到其Vim定义的值,或者更一般地说,设置 t_公司 和/或 学期 与主机终端不匹配的值是没有意义的,并且当Vim发送终端不理解的信号时可能会产生麻烦,反之亦然。

    虽然这样做是完全可能的,但 t_公司 学期 在Vim中既完全无用,也可能有害。

    同样,只需正确设置终端模拟器和终端多路复用器。那是 真正地 你所需要的一切。

    如果 在终端多路复用器或终端模拟器中,您最终无法定义正确的 期限 ,然后并且只有这样,您才能强制Vim采用256种颜色。为此,改变 t_公司 是唯一有意义的事情:

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

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

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

    你就完了。

    如果你 不能 控制每个部分,在 ~/.vimrc 设置 t_公司 根据 &学期 但不要改变的值 学期 .

    但如果你能编辑 ~/.vimrc 没有理由不能编辑 ~/.screenrc ~/.tmux.conf ~/.bashrc 或者其他什么。

        2
  •  11
  •   Jim Stewart    13 年前

    两者都可以使用 set t_Co=256 set term=xterm-256color 在一起

    term 告诉Vim要使用什么终端类型,它控制Vim所有方面的显示/呈现,包括如何映射键输入、重画屏幕、移动光标、显示颜色等。通常,Vim可以通过 TERM 操作系统提供的环境变量。

    在操作系统值不正确的情况下,显式设置它通常很有帮助。如果您从没有提供正确值的终端模拟器通过网络进行连接,则情况尤其如此。

    t_Co 是许多终端选项之一(由Vim用于终端控制的termcap系统使用)。它具体指的是终端支持的颜色数量。有时,如果终端模拟基本正确,但Vim无法正确识别支持的颜色数量,则需要覆盖此项。

    我在我的 .vimrc 以确保Vim在tmux中使用256种颜色,使用我喜欢的所有终端(Ubuntu的gnome终端、OSX的iTerm2和Windows的KiTTY)。我还将大多数终端明确配置为发送 xterm-256color 作为它们的终端类型。