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


29

環境:

  • 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のスクリーンショットです。

ここに画像の説明を入力してください

私の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の色が異なる端末の機能で具体的に何が原因ですか?:set termcaptmuxの内部と外部の 実行の違いはわかりますが、どの変数が実際に動作の違いを引き起こすのか興味があります。

前の質問とは無関係に、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を起動しtmux -2ます。

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


起動してscript、起動してvim、終了してvimからscriptシェルを終了して、結果のtypescriptファイルを添付してください。次に、TERM=screen-256color vim代わりに同じ手順を繰り返します。
エグモント


1
xterm-256colorバージョンでは256色のエスケープシーケンスを見ることができます(ファイルで "38; 5;"を検索します)screen-256color。たとえば、\e[38;5;81min xterm-256color(256色パレットの色#81、真ん中の青の色合い)がある場所にscreen-256colorは、\e[34m代わりに(8色パレットの標準の青)が含まれています。したがって、主な質問は、なぜvimが256色パレットを使用しないのかですTERM=screen-256color
エグモント

もう1つの興味深い点は、このxterm-256colorバージョンでは、画面を2回印刷するように見えることです。最初は従来の色で、次に256色のパレットで印刷されます。ファイル内で「F1」などを検索するとxterm-256color、に2つの一致があり、最初は\e[34m色で、2番目はで一致してい\e[38;5;81mます。ここで何が起こっているのか分かりません。
エグモント

tmux(<Cs>:source-file〜/ .tmux.conf)set -g default-terminal "screen.xterm-256color"で構成~/.tmux.confを追加して再ロードすると、うまくいきました(問題を強調表示)。thx
dtrckd

回答:


16

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

その特徴はtmux数回言及されています-


まさに私が探していた種類の知的満足の答え。ありがとうございました!
ラスティシャクルフォード

17

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

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

そして.vimrc

set background=dark

これは次のようになり、GnomeターミナルとCygwinの両方で機能します。 ここに画像の説明を入力してください


3
これで解決しました。何らかの理由で、tmux内では、vimは暗い背景を検出しませんでした。bg=darkvimrcで明示的に設定すると修正されました。
アダムキーナン

奇妙な-私の$TERM内側と外側の両方tmux"xterm-256color"、明示的に背景を設定してくれました。ありがとうございました!
nronnei

私のためにも働いた。すべてが快適に見えたsttermので、問題があると思いましたxfce4-terminal(暗い背景では読みにくいcyanblueではなくコメントが表示されます)。この変更の後、すべてが正常に機能します。しかし、追加することを忘れないでくださいunlet! skip_defaults_vim source $VIMRUNTIME/defaults.vim...シンタックスハイライトなどを使用するためにvimrcファイルに
Abinashダッシュ

2

@egmontがVimが出力する色を分析したおかげTERM=screen-256colorで、2つのシナリオでVimが使用しているカラースキームを見ることができました。

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

Ask Ubuntuの回答で、Vimがdefault配色を使用していると報告したとき、それは必ずしもdefault.vimテーマ固有の配色ではなく、テーマ固有の配色を使用していることを示唆しています。答えが指摘するように、ron私が上で見つけたように、暗いテーマ(私が使用している)は配色に対応しています。(この投稿はUbuntuに関するものですが、OPはGNOMEを使用していたと考えています。)

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

@LapshinDmitryが彼の答えでやったことをやったので、明示的colorscheme ron~/.vimrcファイルに設定しました。さて、tmuxの内側でも外側でもVimを起動しても、色は同じように見えます。唯一の欠点は、デスクトップテーマを暗いフレーバーから明るいフレーバーに変更しても、Vimが自動的に「デフォルト」のライトテーマカラースキームに切り替えないことですpeachpuff。テーマを変えることはまずないので、私はそれで生きることができます。

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


また、なぜvimこのように動作するのか興味があります。結局のところ、bce機能は利用可能な色の数とは何の関係もないはずです。
エグモント

@egmont @ThomasDickeyの答えを次のように解釈しました。1)Vim bceは端末の機能をチェックし、2)存在する場合はカラースキーム「A」を選択し、3)そうでない場合はカラースキーム「B」を選択します。私は両方の場合で色深度が同じであると信じています(つまり、図のように256色t_Co)。私のシステムの配色「B」は、256色が可能な場合でも8色パレットのみを使用しているだけです(タイプスクリプト分析で観察したことを説明していると思います。間違っている場合は修正してください)。を実行する:colorscheme ronと、同じVimセッションで256色のエスケープシーケンスが表示されます。
ラスティシャクルフォード

説明してくれてありがとう-私はまだこの背後にある理由を見ることができません。気にしないで。vim本当に奇妙なデザイン決定をしています。
エグモント

0

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

それは私にとって正しいことです。別の端末(私はurxvtを使用)で試して、Gnome端末に問題があるかどうかを確認します。。。。 

また、COLORTERM(mineがに設定されているrxvt)とを確認しunset TERMCAPます。


提案をありがとう。適切な残念なことにまだtmuxの内部と外部で異なる色を観察しながら、同じテストをurxvt(外側TERMrxvt-unicode-256color~/.Xdefaultsで実行しました。gnome-terminalシナリオの場合、tmuxの内側と外側の両方でCOLORTERMis truecolorおよびTERMCAPemptyです。urxvtのシナリオでは、COLORTERMあるrxvt-xpm外部とtruecolorしながら、内部TMUX TERMCAP内外TMUX両方が空です。
ラスティシャクルフォード

@RustyShacklefordこれはVim専用ですか?「termguicolors」を使用していますか?:help xterm-true-colorよりデフォルトのVim構成を確認するか、試してください。
ラクタク

これまでのところ、Vimの問題に気づいただけです(私が言ったように、最近tmuxを使い始めたばかりです)。たとえば、私の端末プロンプトとGit CLI出力は、tmuxの内部と外部の両方で同じ色を持っているように見えます。私は両方のケースでレポートとレポートを設定termguicolorsしません。参照したヘルプトピックを見てみましょう。ありがとう!.vimrc:set termguicolors?notermguicolors
ラスティシャクルフォード

0

後で自分の参考のために、間違いなくこのマシンをグーグルでグーグルで検索して、次のマシンをセットアップします。

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

これらの手順を使用して、必要なバイナリとDLLをGit bashのPATHに取得します。

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

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

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.