web-dev-qa-db-ja.com

Vimの色がtmuxの内部と外部で異なって見えるのはなぜですか?

環境:

  • 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)
  • tmux 2.2

最近tmuxを使い始めましたが、tmuxの内部と外部のどちらで実行しているかによってVim内の色が変化することを確認しました。以下は、Git diffを見ているときのtmuxの外側(左)と内側(右)のVimのスクリーンショットです。

enter image description here

私の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色モードで実行することに関して同様の質問がたくさんあります(私が見つけた最良の答えは here )ですが、上記の情報を考えるとそれは私の問題ではないと思います。

端末タイプを_screen-256color_に設定してVimを実行すると、tmuxの外で問題を再現できます。

_$ TERM=screen-256color vim
_

つまり、_xterm-256color_と_screen-256color_のターミナル機能には、色の違いを引き起こすいくつかの違いがあるだけだと私は思います。 端末機能の何が原因でVimの色が異なるのか?実行中の_:set termcap_はtmuxの内部と外部にありますが、実際にどの変数が動作の違いを引き起こすのか知りたいです。

前の質問とは別に、tmuxの内部または外部で実行するときにVimの色を一致させることは可能ですか?私が試したいくつかのことは次のとおりです。

  • Tmuxが_~/.tmux.conf_で使用するデフォルトの端末を明示的にさまざまな値に設定する(一部はtmuxのアドバイスに反する [〜#〜] faq [〜#〜] ):
 set -g default-terminal "screen-256color" 
 set -g default-terminal "xterm-256color" 
 set -g default-terminal "screen.xterm-256color" 
 set -g default-terminal "tmux-256color" 
  • _tmux -2_を使用してtmuxを開始します。

すべてのケースで、Vimは引き続きtmux内でさまざまな色を表示していました。

36

tmuxは、terminfo機能をサポートしていませんbce(バックカラー消去)、vimをチェックして、「デフォルトのカラー」スキームを使用するかどうかを決定します。

tmuxのその特性は何度か言及されています-

18
Thomas Dickey

以前にも同様の問題がありました。 Vimの青色のコメントは読みにくいものでした。 .tmux.conf私はこれを設定しました:

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

そして.vimrc

set background=dark

これで次のようになり、GnomeターミナルとCygwinの両方で機能します。 enter image description here

21
Vitalii Plagov

@egmontがTERM=screen-256colorのときにVimが出力していた色を分析したおかげで、2つのシナリオでVimが使用している配色を見ることに刺激を受けました。

Vimは、両方の場合にdefault配色を使用していると報告しています。 Fedora 25(/usr/share/vim/vim80/colors/default.vim)のdefault配色がTERM=xterm-256colorのときに実際に見ている色と一致していないように見えるので、私は奇妙だと思いました。 :colorscheme defaultのときにTERM=xterm-256colorを使用して明示的に配色を設定すると、Vimの外観がTERM=screen-256colorのときの外観に変わります。最初にVimを起動したときの色に戻すには、ron配色を使用する必要がありました。進捗!

Ask Ubuntuを見つけた answer は、Vimがdefault配色を使用していると報告している場合、必ずしもdefault.vimを意味しているわけではなく、テーマ固有の色を意味しているスキーム。答えが指摘するように、私が使用している暗いテーマは、上記で発見したとおり、ron配色に対応しています。 (この投稿はUbuntuに関するものですが、私はOPがGNOMEを使用していたと想定しています。)

また、私が抱えている同じ問題を説明しているように見える別の question も見つけました。この質問を投稿する前に検索中に見つけましたが、何らかの理由で、配色が関連性があるとは思われませんでした。

私は、@ LapshinDmitryが彼の回答で行ったことをやり遂げ、colorscheme ronファイルに~/.vimrcを明示的に設定しました。 Vimをtmuxの内側と外側のどちらから起動しても、色は同じに見えます。唯一の欠点は、デスクトップテーマをダークフレーバーからライトフレーバーに変更した場合、Vimが「デフォルト」のライトテーマの配色に自動的に切り替わらないことです。これは、明らかにpeachpuffです。テーマを変更することはほとんどないので、私はそれと共存できます。

解決策ではなく回避策として~/.vimrcでカラースキームを明示的に設定することを検討しているため、この回答は受け入れません。誰かがVimがTERMの値に応じて異なる「デフォルト」のカラースキームをロードする理由を説明できる場合は、根本的な原因を理解することに興味があるため、喜んでその答えを受け入れます。 Vimが2つのterminfoファイル間の端末機能をどのように解釈するかと関係があると思います。

2

私のTERM変数はtmuxの外側:xterm-256color tmuxの内側:screen-256color

それは正しいですし、私のために働いています。別のターミナル(私はurxvtを使用)で試して、Gnomeターミナルが問題かどうかを確認します。使用すること

また、COLORTERM(私のものはrxvtに設定されています)とunset TERMCAP

0
laktak

後で参照するために、次のマシンを間違いなくグーグルでセットアップしたときのことです。

  • Vim8/Neovim
  • ウインドウズ10
  • Git bash
  • Tmux 2.7

以下の手順を使用して、必要なバイナリーとDLLをGit bashのPATHに入れます。

https://blog.pjsen.eu/?p=44

以下のコマンドを使用して構成します。

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
0
Josh Peak