簡體   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