[英]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=256
來set term=xterm-256color
,現在當使用Vim到Tmux時顏色有效。
另請注意,我測試了Tmux的set -g default-terminal "xterm-256color"
和set -g default-terminal "screen-256color"
設置,此更改對行為沒有影響。
當您不使用tmux
或screen
,您只需將終端仿真器配置為通過將其TERM
設置為xterm-256color
或任何與您的終端和平台兼容的可比值來宣傳自己“能夠顯示256種顏色”。 你如何做到這將取決於終端模擬器,超出了你的問題范圍和這個答案。
你不需要在Vim中做任何事情,因為它完全有能力自己做正確的事情。
當你使用tmux
或screen
,這些程序為$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_Co
和term
既完全沒用,也可能有害。
再次,只需正確設置終端仿真器和終端多路復用器。 這就是你真正需要的一切。
如果您最終在終端多路復用器或終端仿真器中無法定義正確的TERM
,那么只有這樣您才能強制Vim采用256色。 為此,改變t_Co
的值是唯一有意義的事情:
if &term == "screen"
set t_Co=256
endif
所以...如果你可以配置每個單獨的部分:
xterm-256color
screen-256color
你完成了
如果你無法控制每個部分,可以在~/.vimrc
使用一個簡單的條件來根據&term
設置t_Co
但不要更改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
作為其終端類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.