cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

俺が見たいのはメッセージの最後なんだ!:messagesを便利にするVimプラグイン

Vim Advent Calendar 2012 330日目の記事です。

Vimでエラーが発生した時にメッセージが表示されます。
そのメッセージを後から確認したい場合は:messagesでメッセージ履歴を表示します。
しかし:messagesにはVimが起動してからのメッセージが蓄積されているので、長時間起動しているとメッセージが長くなってしまい、最後の方にある目当てのメッセージを表示するためにスクロールさせるのが苦痛になってきます。
知りたいのはエラーが発生してからのメッセージ数行だけでいいのに、200のメッセージをスクロールしなければいけないかもしれないのです。

見ることのできるメッセージ数は、tiny バージョンでは20に、それ以外のバージョン
では200に固定されている。
:help :messagesより引用)

このメッセージは蓄積される数を変更することも出来ないし、消去することも出来ません*1。非常に不便です。

前々からフラストレーションを感じていたので、こんなのを作りました。

NeoBundle 'LeafCage/lastmess.vim'

これを使えば、

:LastMess

で、デフォルトで最後の10行のメッセージが表示されます。

:LastMess 12

または

:12LastMess

というように数値を与えてやると、最後の与えられた数字行のメッセージ(この場合は最後の12行)が表示されます。

表示される行のデフォルト値は10ですが、g:lastmess_default_countで変更することが可能です。

let g:lastmess_default_count = 15

<Plug>(lastmess)はキーマップ版です。例えばこれを

nmap mz <Plug>(lastmess)

というキーに充てておきますと、mzでデフォルトの10行のメッセージが表示されます。
15mzのようにカウントを与えると、その行数分のメッセージが表示されます。

カウントに999などの大きな数値を与えた場合は、メッセージが最初から表示されます(:messagesと同じですね。)。
これで:messagesを見るストレスが軽減され、特にプラグイン制作者は捗ることでしょう。

*1:for i in range(200)| echom ''| endfor みたいなことをすればメッセージをクリア出来るとおしょーさんに教えていただきました。 http://lingr.com/room/vim/archives/2013/10/26#message-17184693