Vimの色がtmuxの内側と外側で異なるように見えるのはなぜですか?

Vimの色がtmuxの内側と外側で異なるように見えるのはなぜですか?

環境:

  • Fedora 25(4.9.12-200.fc25.x86_64)
  • GNOMEターミナル3.22.1はVTEバージョン0.46.1 + GNUTLSを使用します。
  • VIM - Vi 改善された8.0(2016年9月12日、2017年2月22日16:26:11で編集)
  • マルチプレクサ2.2

私は最近tmuxを使い始めましたが、tmuxの内部で実行しているのか外部で実行しているのかによってVimの色が変わることがわかりました。以下は、Git diffを見るときのVimの外側(左側)と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

tmuxでVimを256色モードで実行することに関して同様の質問がたくさんあります。 (私が見つけた最高の答えは次のとおりです。ここ)、しかし上記の情報を考えると、それは私の問題ではないと思います。

Vimを実行し、端末タイプを次のように設定した場合screen-256color

$ TERM=screen-256color vim

xterm-256colorscreen-256colorしたがって、これは色の違いを引き起こす端末機能間にわずかな違いがあると信じています。これはタイトルで提起された質問につながります。ターミナル機能でVimの色が異なるように見えるのはなぜですか? tmuxの内部と外部で実行することの違いはわかりますが、:set termcap実際にどの変数が動作の違いを引き起こしているのか疑問に思います。

前の質問とは別に、tmuxの内側または外側でVimの色を一貫して維持できますか? 私が試したいくつかのことは次のとおりです。

  • tmuxで使用されるデフォルトの端末を~/.tmux.confさまざまな値に明示的に設定します(一部はtmuxの推奨事項に違反します)。よくある質問):
    -g 基本端末「screen-256color」設定
    -g 基本端末「xterm-256color」設定
    -g 基本端末「screen.xterm-256color」の設定
    -g 基本端末「tmux-256color」設定
  • tmux -2以下を使用して tmux を起動します。

すべての場合において、Vimはtmux内で他の色を表示し続けます。

答え1

以前も同様の問題が発生しました。 Vimの青いコメントは読みにくいです。私の設定では.tmux.conf次のようになります。

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

そして.vimrc

set background=dark

これで、次のようになり、Gnome TerminalとCygwinで動作します。 ここに画像の説明を入力してください。

答え2

tmuxterminfo機能はサポートされていません。bce(背景色を消去)、vim「基本色」スキームを使用するかどうかを確認します。

この機能はtmux何度も言及されています。

答え3

次の設定が~/.tmux.conf私にとって効果的です。

# file ~/.tmux.conf
# ...

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

# make colors inside tmux look the same as outside of tmux
# see https://github.com/tmux/tmux/issues/696
# see https://stackoverflow.com/a/41786092
set-option -ga terminal-overrides ",xterm-256color:Tc"

# ...

答え4

.tmux.conf私のためにRGBカラーを取得するには、以下を追加する必要がありました。入らないようにする色の違い。

set -ag terminal-overrides ",xterm-256color:RGB"
set  -g default-terminal "tmux-256color"

関連情報