環境:
最近tmuxを使い始めましたが、tmuxの内部と外部のどちらで実行しているかによってVim内の色が変化することを確認しました。以下は、Git diffを見ているときのtmuxの外側(左)と内側(右)のVimのスクリーンショットです。
私のTERM
変数は
xterm-256color
_screen-256color
_Vimはこれらの端末タイプを(_:set term?
_を介して)期待どおりに報告します
term=xterm-256color
_term=screen-256color
_Vimはまた、両方のインスタンスが256色モードで実行されていることを報告します(_:set t_Co?
_を介して)。
t_Co=256
_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.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内でさまざまな色を表示していました。
tmux
は、terminfo機能をサポートしていませんbce
(バックカラー消去)、vim
をチェックして、「デフォルトのカラー」スキームを使用するかどうかを決定します。
tmux
のその特性は何度か言及されています-
@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ファイル間の端末機能をどのように解釈するかと関係があると思います。
私のTERM変数はtmuxの外側:xterm-256color tmuxの内側:screen-256color
それは正しいですし、私のために働いています。別のターミナル(私はurxvtを使用)で試して、Gnomeターミナルが問題かどうかを確認します。使用すること
また、COLORTERM
(私のものはrxvt
に設定されています)とunset TERMCAP
。
後で参照するために、次のマシンを間違いなくグーグルでセットアップしたときのことです。
以下の手順を使用して、必要なバイナリーとDLLをGit bashのPATHに入れます。
以下のコマンドを使用して構成します。
echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u