vimの選択範囲のテキストを外部コマンドに渡す

選択範囲のテキストをレジスタを経由してvimscriptの変数とし、その変数の出力を一時ファイルにリダイレクトして外部コマンドを実行することで実現できる。

その一例として、VisualモードでDOT言語のコードを選択した状態で以下の関数を呼び出して表現されるグラフの画像を取得できる。

function! MakeDotGraphFromSelected()
    let tmp = @@
    silent normal gvy
    redir! > tmp.dot
    let selected = @@
    silent echo selected
    redir END
    call system('dot -Tpng -o tmp.png tmp.dot')
    call delete('tmp.dot')
    let @@ = tmp
endfunction

参考