web-dev-qa-db-ja.com

256色の画面内のvim色の奇妙な動作

vim内で動作しているscreen内でgtermの構文強調表示(256色)を機能させようとしていました。

最初はかなりうまくいきます。 「はじめに」とは、screenを開始してvimと入力すると、色がうまく見え、実際には256色あります。

しかし、しばらくすると(正確な時間はわかりません)、8色(または16色)しか存在しないかのように、色が自動的に外観に戻ります。

たとえば、これが既に発生した後、コマンドを入力すると

hi Comment ctermfg=68

vim内では、コメントは「純粋な」緑色で表示されます。ただし、(同じ端末で)別のvim画面外を開くと、同じコマンドでコメントが「黄色がかった」緑に見えます。

以下は、色に関連する私の.screenrc設定です。

attrcolor b ".I"
defbce "on"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term xterm-256color

pythonスクリプトを実行してすべての色を表示した後、これは画面自体の問題であり、vimとは何の関係もないことがわかりました。

私がしたことは、問題のあるscreenセッション内で、このスクリプトは256色を提供しますが、それらの多くは実際には同じです。ただし、同じ構成で新しいスクリーンセッションを開始すると、このスクリプトは、互いに異なる256色を提供します。

編集:

昨夜、PuTTYを使用してLinuxコンピューター(オフィスにあり、常にオンになっています)に接続し、複数のウィンドウでscreenセッションを開きました。色は昨夜正しいです。次に、スリープ状態になる前に、screenセッションを切り離してPuTTYを閉じました。

朝、screenセッションをPuTTYに再度アタッチすると、色がクラッシュします。色が8色しかないように見えます。

色はscreen外でも問題ありません(ただしPuTTYでも)。

編集:

私がこの質問をしてから3年後、今日、私は同様の問題を見ました。問題は、vimscreenの外側で256色を表示でき、screenがテストスクリプトで256色を表示できるが、vimは256色を表示できないことです。 screen内の色(白黒のみ表示可能)。私へのメモとして、ここに.screenrc使用しているファイル

hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c"
Shell "bash"
startup_message off
vbell off
altscreen on
attrcolor b ".I"
defbce "on"
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term screen-256color

問題の解決策はすでに受け入れられた回答に記載されています、つまり、私は含める必要があります

export TERM=xterm-256color

.bashrc

46
FJDU

簡潔な答え

xterm-256colorTERM.bashrcに設定し、term screen-256color.screenrcに入れます。

長い答え

これが壊れる理由は次のとおりです:gnome-terminal、screen、tmux、bash、PuTTY、vimは、256色をインテリジェントに処理するようにallと記述されていますが、できるだけ早い段階で正しく設定してください。 .screenrctermcapinfoを使用することは、実際にはダクトテープソリューションです。

TERMが正しく設定されている場合は、256色モードであることをbashに通知します。つまり、画面が256色モードでも、Niceが再生されます。

つまり、.bashrcexport TERM=xterm-256colorで。 [1]

.screenrcでは、screen-256colorではなくTERMxterm-256colorを使用して、残りの残骸を削除してください。

PuTTY構成では、PuTTY-256colorを使用します。

Termcapエントリファイルをダウンロードして、~/.terminfo/sおよび~/.terminfo/pに配置できます(ボックスにデフォルトで含まれていない場合)。


脚注

[1] xterm-256colorTERM.bashrcに設定すると、特に複数のマシンで同じ.bashrcを使用する場合は、少しおかしくなることがあります。次のスニペットがかなり効果的であることがわかりました。

case "$TERM" in
*-256color)
    alias ssh='TERM=${TERM%-256color} ssh'
    ;;
*)
    POTENTIAL_TERM=${TERM}-256color
    POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM

    # better to check $(toe -a | awk '{print $1}') maybe?
    BOX_TERMINFO_DIR=/usr/share/terminfo
    [[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM

    HOME_TERMINFO_DIR=$HOME/.terminfo
    [[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \
        export TERM=$POTENTIAL_TERM
    ;;
esac

Sshのaliasは、必ずしもサポートしていないリモートマシンで256色のターミナルを開こうとするのを防ぐための防御策です。メインブロックは方程式の残りの半分です。対応するterminfoエントリが存在するかどうかを確認し、存在する場合は設定します。

87
Max Cantor

マックスは素晴らしい答えを持っていますが、私は実際に./configure --enable-colors256ファイルにconfig.hが設定されていることを確認するために#define COLORS256 1reinstall screenを実行する必要がありました、私のマシンではデフォルトではそうではありませんでした。その後、TERMxterm-256colorに設定されていることを確認した限り、他の設定は必要ないことがわかりました。

15
Nick Merrill

Screenの最新バージョン(v4.99.0)では、term screen-256color.screenrcを使用する必要はありません。この設定がなくても、画面の内側と外側のvimの色はまったく同じです。

注1:Mac OS High Sierra 10.13.4およびUbuntu 16.04でこの機能をテストしました。

git clone https://git.savannah.gnu.org/git/screen.gitを使用して、screenの最新バージョンを入手できます。

注2:以前の一部のバージョンとは異なり、 configuring このバージョンの画面では、--enable-colors256オプションを使用する必要はありません。

注3:この構成を成功させるには、PAMサポートが必要です。 ubuntuでは、Sudo apt-get install libpam0g-devを使用できます

注4:この手順ではSudoを使用するため、make installを実行している間はUbuntuでchownアクセスが必要になります。

1
Nikhil