LoginSignup
13
13

More than 5 years have passed since last update.

Vimの色変更の後始末をする

Last updated at Posted at 2014-03-01

はじめに

gnome-terminal から起動した Vim でカラースキームを変更すると、Vim の終了後に起動した別のコマンドで表示が乱れる場合があるようです。

どうやら xterm では発生しないようですので、ひょっとすると gnome-terminal の問題なのかもしれませんが、Vim側で何とか対処できましたのでその方法を紹介します。

Vim の終了後に起動したコマンドで表示が乱れる

例えば、Vim の終了後に less --help を実行するとこのような画面になります。

broken_less.png

一応、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 の表示が乱れることを確認しました。

上記の対処方法で何か問題点や改善策等ありましたら、ぜひコメント等でお知らせください。

13
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13