Edited at

QuickRunでVimのメッセージの出力をキャプチャするコマンドを定義する

More than 3 years have passed since last update.

追記

7.4.2008 にて、execute() 関数が追加されました (7.4.1996~7.4.2007 はevalcmd())。

これを利用すれば、QuickRun を利用しなくても手軽にコマンドの出力をキャプチャできそうです。


Vimには:messages:scriptnames:mapなど、現在のステータスメッセージを出力するコマンドがたくさんあります。

たとえば、現在のバッファ固有のキーマップを確認するためには、:map <buffer>などが便利ですし、&runtimepathを確認したり、環境変数を確認するため、:echoを利用するシーンは多々あるかと思います。

しかし、これらのコマンドは結果をメッセージ行に表示するため、通常のウィンドウのように操作をすることができず、表示行数が多い場合には、目的のものを探すのがつらいです。

また、コピペをする場合にも、マウスを使って選択した後で<C-y>したりする必要があったり、なにかと不便です。

ですので、これらメッセージの出力をVimのバッファに出力できると便利です。

それ専用にプラグインが作成されたりしていますが(*1,*2)、

ここでは、みんなだいすき QuickRun を利用して、実現します。

QuickRun vim -src 'messages'

これだけだと味気ないので、もう一工夫します。

command! -nargs=+ -complete=command Capture QuickRun -type vim -src <q-args>

これで、Exコマンドのコマンドライン補完のサポートつきで、キャプチャするコマンドを定義しました。

:Capture の後、<TAB>を押す事で、コマンドを補完することができます。

" メッセージを確認する

Capture messsages
" スクリプトのロード履歴を確認する
Capture scriptnames
" 現在のバッファにマップされているキーマップを確認する
Capture map <buffer>
" 環境変数`$PATH`を1エントリ1行にばらして確認する
" 1. Windows
Capture echo tr($PATH,";","\n")
" 2. bash
Capture echo tr($PATH,":","\n")