Ruby スクリプトの結果を手軽に Vim のバッファに適用できないものかと調べた結果、Vim には Ruby/Python/Perl インタフェースなるものが実装されていることを知った。詳しくは、:he ruby (和訳) にある。
主に使用するコマンドは以下の 2 つ。
:ruby {command}
command を実行する。現在のバッファは VIM::Buffer.current または、グローバル変数の $curbuf で参照が可能。例えば、現在のバッファに hoge0 ~ hoge9 を挿入するには、VIM::Buffer オブジェクトの append メソッドを利用して
:ruby 10.times{|x|$curbuf.append($curbuf.count,"hoge#{x}")}
とすればよい。
:[range]rubydo {command}
[range] に指定された各行が $_ に格納される。Vim の正規表現では煩わしい時や、文字列処理などに使える。[range] を省略した場合はファイル全体が対象となる。また、[range] には、ビジュアルモードで選択した範囲も適用できる。
例えば、
hoge foo bar
バッファの内容がこのような状態であれば
:rubydo $_.chop! または :rubydo chop
hog fo ba
という処理や
:rubydo $_.gsub!(/[aeiou]/,"*") または :rubydo gsub(/[aeiou]/,"*")
h*g* f** b*r
というような処理が可能。