tmuxでのvim背景の256色のサポート


98

tmux内でvimを使用していると、256色のサポートが有効になっていることがわかります。$ tput色で

ただし、tmuxでvimでカラースキームを変更すると、背景全体ではなく行ごとにカラースキームが変更されます。スクリーンショットを見るここに画像の説明を入力してください

たとえば、これはmy .vimrcファイルのスニペットです。私の元のカラースキームは暗くソラライズされており、:colorscheme molokaiを実行すると、何が起こるかがわかります。

情報

  • gnome-terminal
  • バッシュ

私の〜/ .tmux.confで

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

私の〜/ .vimrcで

    set t_Co=256

私の〜/ .bashrc

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

私の〜/ .profileで

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

vimで完全なカラースキームの変更を取得する方法はありますか?ファイルのスニペットはすべて見栄えが良いですか?


通常モードでcontrol-lを押すか、「:redraw」コマンドを実行するとどうなりますか?
ヘプタイト

@Heptiteはまだ何も起こりません。色の変更はスクリーンショットのように行ごと
です-winchendonsprings

回答:


75

.bashrcと.profileの外観から、tmux内のシェルは、tmux confの「default-terminal」設定をオーバーライドしています。このようなもの:

  • tmuxは新しいシェルを作成します TERM=screen-256color
  • .bashrc / .profile run、set TERM=xterm-256color
  • vimが実行され、tmuxに誤ったTERMを使用しようとします

これを確認するには次を実行します

echo $TERM

新鮮なtmuxシェル。

Tmuxは、ターミナルを正しく設定することについて比較的気難しいです。可能であれば、用語値を.bashrcではなく、gnome-terminalの構成で設定します。それに失敗したら、それらの設定を「screen」または「screen-256color」TERMのチェックで囲み、その場合はリセットしないでください。

Tmuxは本当に端末を設定するscreenか、screen-256color


5
さて、あなたはそれを修正しました。色を256に設定するために必要な.bashrcファイルと.profileファイルをコメントアウトしました。再起動したtmuxとvimは、適切な背景と256色を有効にして動作します。gnome-terminalの設定ファイルの場所を教えてください。また、tmuxが端末を 'scfeen-256colorに設定することを望んでいると言った場合、tmux.confにそれがあるということですか?ありがとう
-winchendonsprings

チェックするのに便利なgnome-terminalを搭載したマシンはありませんが、設定はGUIのどこか、おそらく「プロファイル設定」またはそのようなものの下にあるはずです。
bloy

5
また、はい、tmuxがスポーンするシェルに対して独自の処理を行うようにします。set -g default-terminal "screen-256color"tmux confの行を残します。
-bloy

2
上記のすべてが私が望んでいたことです(TERMが正しく設定され、tmuxでオーバーライドされないことを確認してください)。
ファントムクジラ

試してif [[ $TERM == xterm ]]; then TERM=xterm-256color; fi、それは私のために働いた。
非対称

59

ここ説明したように、VimがtmuxおよびGNU画面内で使用されている場合にカラースキームが適切に機能するように、ターミナルオプションをクリアして(Vimで実行してから+ を押してターミナルのディスプレイを更新する)バックグラウンドカラー消去(BCE)を無効にします。t_ut:set t_ut=ControlL


7
これが最終的に私のために働いた唯一のものです!
Oz123

3
最終的set t_ut=にvimrcに追加すると、コマンドを手動で使用する必要がなくなり、BCEを無効にしてセッションが開始されるため、<kbd> Control </ kbd> + <kbd> L </ kbd>を使用する必要がなくなりました。
-erran

これはPuTTYを使用する場合に不可欠です。カラースキームに背景がある場合、TERMの組み合わせはすべて不足します。スレッドへの素晴らしい追加。
ボタイマー

このソリューションは、コピーもマウスでコピー&ペーストを適用し、行を末尾のスペースを貼り付けているとき、これはしかし、作品(それらが強調表示されている場合。)
馬の毛

17

この投稿でより良い方法を見つけました。tmuxのエイリアスを作成しtmux -2て、シェルが256色の端末を使用しているとtmuxに強制させることができます。


4

これが#Ubuntuと#Macで私にとってうまくいったことです:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

設定の再読み込み:

$ source〜/ .bashrc#Ubuntu

$ source〜/ .bash_profile#Mac

Mac用の.bashrcをセットアップします(tmuxで使用されるため)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

〜/ .tmux.confで「default-terminal」オプションを設定します。

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu

1

簡単な修正方法は、ターミナルで次を実行することです。

export TERM=xterm-color

それを自分~/.bash_profileまたは他のプロファイルに追加して、常に起動時に設定することができます。


ありがとう!これで、.zshrcビジュアルモードを実際に表示するために追加する必要がありました。
danmcardle

1

gnome-terminal + tmux + vimでも非常に似た問題がありましたが、特定のキーの組み合わせの問題にも拡張されました。いくつかのことを組み合わせなければなりませんでした。まず、.tmux.confを次のようにセットアップする必要がありました。

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

次に.vimrcで:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

そして、それはキーとバックグラウンドの仕事をしました。


1

それでも問題が解決しない場合:がに設定されていt_Co=8ても、vimはtmux内のオプションの使用にフォールバックすることに気付き$TERMましたscreen-256color。私の回避策はvimrcのこのスニペットです:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

この$TMUX変数は、tmuxセッション内の場合にのみ入力されます。この場合、vimが256色を使用できるようにします。tmuxはトゥルーカラーをサポートしていないため、termguicolorsも設定解除していることに注意してください。


0

今、同じ問題に直面しました。bloyの答えと私の〜/ .profileの現在の内容に基づいて(実際にはwinchendonspringsと同じです)私は次のように問題を解決しました:

~/.profile

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

ロジックは単純です。tmuxセッション内にいない場合は、xterm(色付きまたはなし)を使用します。それ以外の場合は、画面についても同じです。

たぶん冗長すぎるかもしれませんが、あなたはそのアイデアを得ました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.