Terminal

為什麼 Vim 顏色在 tmux 內部和外部看起來不同?

  • February 4, 2022

環境:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • GNOME 終端 3.22.1 使用 VTE 版本 0.46.1 +GNUTLS
  • VIM - Vi IMproved 8.0(2016 年 9 月 12 日,2017 年 2 月 22 日 16:26:11 編譯)
  • 多路復用器 2.2

我最近開始使用 tmux 並觀察到 Vim 中的顏色會根據我是在 tmux 內部還是外部執行而變化。下面是 Vim 在查看 Git diff 時在 tmux 外部(左)和內部(右)的螢幕截圖:

在此處輸入圖像描述

我的TERM變數是

  • 外部 tmux:xterm-256color
  • tmux 內部:screen-256color

Vim 按預期報告這些終端類型(通過:set term?):

  • 外部 tmux:term=xterm-256color
  • tmux 內部:term=screen-256color

Vim 還報告兩個實例都在 256 色模式下執行(通過:set t_Co?):

  • 外部 tmux:t_Co=256
  • tmux 內部:t_Co=256

關於讓 Vim 在 tmux 中以 256 色模式執行有很多類似的問題(我找到的最佳答案是在這裡),但鑑於上述資訊,我認為這不是我的問題。

如果我在終端類型設置為以下的情況下執行 Vim,我可以在 tmux 之外複製問題screen-256color

$ TERM=screen-256color vim

所以這讓我相信導致顏色差異的終端功能xterm-256color和終端功能之間存在一些差異。screen-256color這就引出了標題中提出的問題:終端功能中具體是什麼導致 Vim 顏色不同? 我看到了在 tmux 內部和外部執行之間的差異:set termcap,但我很好奇哪些變數實際上會導致行為差異。

與上一個問題無關,在 tmux 內部或外部執行時是否可以讓 Vim 顏色保持一致? 我嘗試過的一些事情包括:

  • 將 tmux 使用的預設終端顯式設置~/.tmux.conf為各種值(有些違反 tmux FAQ的建議):
設置 -g 預設終端“screen-256color”
設置 -g 預設終端“xterm-256color”
設置 -g 預設終端“screen.xterm-256color”
設置 -g 預設終端“tmux-256color”
  • 使用tmux -2.

在所有情況下,Vim 繼續在 tmux 中顯示不同的顏色。

tmux不支持 terminfo 功能**bce**(背面顏色擦除),該功能vim檢查以確定是否使用其“預設顏色”方案。

的那個特性tmux已經提到過幾次了——

我以前也有類似的問題。Vim 中的藍色註釋很難閱讀。在.tmux.conf我設置這個:

set -g default-terminal "screen-256color"

並在.vimrc

set background=dark

現在它看起來如下,並且在 Gnome Terminal 和 Cygwin 中都可以使用: 在此處輸入圖像描述

引用自:https://unix.stackexchange.com/questions/348771