web-dev-qa-db-ja.com

tmuxでのvimの背景に対する256色のサポート

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

ただし、tmuxでvimのカラースキームを変更すると、1行単位でカラースキームが変更されますが、背景全体は変更されません。スクリーンショットを見る enter image description here

これは、たとえば、私の.vimrcファイルの抜粋です。私のオリジナルのカラーシェイムは暗くなって、それから走った後に色づけされます。

情報

  • gNOME端末
  • bash

私の〜/ .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で完全なカラースキームの変更を得ることができますか?ファイルのスニペットはすべて見栄えが良いですか。

98

あなたの.bashrcと.profileを見ると、tmux内のシェルはあなたのtmux confの 'default-terminal'設定を上書きしています。このようなもの:

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

あなたが実行することでこれを確認することができます

echo $TERM

新鮮なtmuxシェルで。

Tmuxは端末を正しく設定することに関して比較的うるさいです。可能であれば、.bashrcではなくgnome-terminalの設定でtermの値を設定してください。それに失敗したら、それらの設定を "screen"または "screen-256color" TERMのチェックで囲み、その場合それらをリセットしないでください。

Tmuxは、端末をscreenまたはscreen-256colorに設定します。

74
bloy

ここで説明されているように 、無効にするBackground Color Erase(BCE)端末オプションt_utをクリアして(Vimで:set t_ut=を実行してから押す) Control+L tmuxとGNU screenの中でVimが使われているときに配色が正しく機能するように、端末の表示を更新します。

59
sunaku

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

17
Boogy

これは#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
3
Munish

私は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
P4C

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

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

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

1
lgalke

手っ取り早い解決策は端末で以下を実行することです。

export TERM=xterm-color

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

1
Peter Dietz

ちょうど今同じ問題に直面しました。 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(色付きかどうかは関係ありません)を使用してください。それ以外はscreenでも同じことが言えます。

冗長すぎるかもしれませんが、あなたはその考えを思いつきました。

0
evilguc