はじめに
gnome-terminal から起動した Vim でカラースキームを変更すると、Vim の終了後に起動した別のコマンドで表示が乱れる場合があるようです。
どうやら xterm では発生しないようですので、ひょっとすると gnome-terminal の問題なのかもしれませんが、Vim側で何とか対処できましたのでその方法を紹介します。
Vim の終了後に起動したコマンドで表示が乱れる
例えば、Vim の終了後に less --help
を実行するとこのような画面になります。
一応、r
キーで再描画すれば直ることは直るのですが、一々面倒ですし、何となく気持ち悪いですよね。
t_Co
オプションの値を変更して対処する
そこで色々試した結果、Vim の終了時に t_Co
オプションの値を変更すればこの現象は発生しないことが分かりました。
(相談に乗っていただいた、@osyo-manga さんありがとうございました)
現在は下記のコードを ~/.vimrc
に追加して対処しています。
" Set 256 colors
let s:saved_t_Co=&t_Co
if $COLORTERM == 'gnome-terminal'
set t_Co=256
endif
" Restore t_Co for less command after vim quit
augroup restore_t_Co
autocmd!
if s:saved_t_Co == 8
autocmd VimLeave * let &t_Co = 256
else
autocmd VimLeave * let &t_Co = 8
endif
autocmd VimLeave * let &t_Co = s:saved_t_Co
augroup END
終了時に let &t_Co =
を二度実行しているのは、t_Co
オプションの値を同じ値で上書きした場合は直らなかったからです。
試した限りでは、終了時にt_Co
オプションの値さえ変更すれば初期値に戻す必要はなかったのですが、念のため安全側に振ってあります。
同様の現象で困っている方は、ぜひお試しください。
最後に
この投稿は当初、「256色表示にしたVimの後始末をする」というタイトルだったのですが、Vim の256色表示モードが原因ではないことが分かったので、タイトルと本文を大幅に修正しました。
私が普段使っている desert256
カラースキームは、8色表示モードでは背景色を変更しないために256色表示モードが発生条件と誤解してしまったのですが、blue
カラースキーム等で確認して、8色表示モードでも less --help
の表示が乱れることを確認しました。
上記の対処方法で何か問題点や改善策等ありましたら、ぜひコメント等でお知らせください。