progd's blog

おいしく楽しくすこやか節酒

vimでvimコマンドの結果(外部コマンドでなく)を挿入する方法

Expression レジスタ "= を使う。

:help registers より:

Expression レジスタ "=

これは、本当はテキストを蓄えるレジスタではないが、レジスタを使うコマンドで式 を評価するために使える。この expression レジスタは読み取り専用である。

http://ac-mopp.blogspot.jp/2014/03/vim.html より:

 <C-R>={何か式}

インサートモードにて入力すると、コマンドモードに=が現れて続けて入力ができます。 例えば、四則演算などの簡単な式を埋め込みたいときなどに有用です。 メモリアドレスの計算なんかしたいときなど 「<C-R>=0xA000 - 0x0909」と打てば「38647」と表示されます。

例えば引数リストをバッファに挿入したい場合

:argadd コマンドで引数リストを作成すると :args コマンドで内容を確認できる。この引数リストは argv() 関数で内容を得られるので、インサートモードで

<C-R>=argv()<CR>

と入力すると引数リストが挿入される。 ノーマルモードで

"=argv()<CR>p

としても同様。