vimコマンド出力をクリップボードへコピー

vimコマンド出力をクリップボードへコピー*1するためには以下のようにすればいいみたい。
例えばノーマル、ビジュアル、演算待ち状態時のキー定義一覧(:map)をクリップボードへコピーするためには以下の3つのコマンドを実行する。

:redir @*>
:silent map
:redir END

silentは付けとかないと画面へも出力されるので鬱陶しい。
もちろん

:redir @*>
:silent map
:silent map!
:redir END

みたいに複数のコマンドを挟んでも可。':redir @*>'の部分を':redir @a>'にすると、レジスタaに代入される。また、':redir @*>>'にするとクリップボードに追記される。詳しくは:help redirect参照。

こんなもの忘れるわ!
という人はユーザvimrcファイルに以下のようなコマンドを追加しておくといいかも(1コマンドの出力をクリップボードへコピー)

func! s:func_copy_cmd_output(cmd)
	redir @*>
	silent execute a:cmd
	redir END
endfunc

command! -nargs=1 -complete=command CopyCmdOutput call <SID>func_copy_cmd_output(<q-args>)

コマンドライン補完も働いて結構便利。(12/01/13修正 call s:→call )

ユーザvimrcファイルの実行時間を1usでも速くしたい人や無駄なメモリは1バイトも許容できない人は関数をautoloadスクリプト内に書くといい。

*1:クリップボードへ貼り付けの方が表現としては正しい??クリップボードvimコマンド出力を転送。とした方が曖昧ではないかも。