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年後、今日、私は同様の問題を見ました。問題は、vim
がscreen
の外側で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
。
xterm-256color
でTERM
を.bashrc
に設定し、term screen-256color
を.screenrc
に入れます。
これが壊れる理由は次のとおりです:gnome-terminal、screen、tmux、bash、PuTTY、vimは、256色をインテリジェントに処理するようにallと記述されていますが、できるだけ早い段階で正しく設定してください。 .screenrc
でtermcapinfo
を使用することは、実際にはダクトテープソリューションです。
TERM
が正しく設定されている場合は、256色モードであることをbashに通知します。つまり、画面が256色モードでも、Niceが再生されます。
つまり、.bashrc
、export TERM=xterm-256color
で。 [1]
.screenrc
では、screen-256color
ではなくTERM
にxterm-256color
を使用して、残りの残骸を削除してください。
PuTTY構成では、PuTTY-256color
を使用します。
Termcapエントリファイルをダウンロードして、~/.terminfo/s
および~/.terminfo/p
に配置できます(ボックスにデフォルトで含まれていない場合)。
脚注
[1] xterm-256color
でTERM
を.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エントリが存在するかどうかを確認し、存在する場合は設定します。
マックスは素晴らしい答えを持っていますが、私は実際に./configure --enable-colors256
ファイルにconfig.h
が設定されていることを確認するために#define COLORS256 1
でreinstall screenを実行する必要がありました、私のマシンではデフォルトではそうではありませんでした。その後、TERM
がxterm-256color
に設定されていることを確認した限り、他の設定は必要ないことがわかりました。
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
アクセスが必要になります。