quickrun-outputter-replace_region つくった

この記事は Vim Advent Calendar 2012 86日目の記事になります。
Vimmer の Advent Calendar は、
まだ続いています。

[quickrun-outputter-replace_region]


上記の機能を Vim で実装しました。
quickrun.vim を使用して選択した範囲の実行結果を選択した範囲に貼り付けます。


[インストール]

NeoBundle "thinca/vim-quickrun"
NeoBundle "osyo-manga/quickrun-outputter-replace_region"

[使い方]

" 実行するコードの範囲を選択して下のコマンドを実行します
" {type} には実行する言語を設定します
" {type} がない場合はバッファに設定されている filetype の言語になります。
:QuickRun -outputter replace_region {type}


" 上記のままだと失敗した場合にエラーメッセージで置き換えられるので
" 成功した場合のみ置き換えるようなコマンドを定義
command! -nargs=* -range=0 -complete=customlist,quickrun#complete
\   ReplaceRegion
\   QuickRun
\       -mode v
\       -outputter error
\       -outputter/success replace_region
\       -outputter/error message
\       -outputter/message/log 1
\       <args>
" hook-unite_quickfix を使用している場合は off にしておいた方がよい
" \       -hook/unite_quickfix/enable 0

" example
" :ReplaceRegion ruby


" 呼び出し用のマッピング
" 使用言語は Ruby で固定
vnoremap <Space>rp :ReplaceRegion ruby<CR>


quickrun.vim では元々指定した範囲の実行は出来るのであとは outputter を設定して出力場所を指定すればいいだけだったんですが、Vim 力が低いのでちょっと苦労しました。
Vim わからないわ。
ちなみに範囲選択しなければバッファ全体が対象になります。


[Ruby で日本語を扱う場合]

元ネタのように Ruby の magic comment を使用する場合は magic comment も一緒に選択する必要があります。
quickrun.vim の場合、日本語に対応させるには g:quickrun_config に設定を既述する方法が楽だと思います。

let g:quickrun_config = {
\   "ruby/utf8" : {
\       "cmdopt" : "-Ku",
\       "type" : "ruby"
\   },
\}

:QuickRun -outputter replace_region ruby/utf8


Vim Advent Calendar 2012 はそろそろ3月に突入するらしいですよ?
参加者はまだまだ募集中です。
2周目をやりたい方がいればこの記事のコメントまでお知らせ下さい。