xmpfilter凄い!

xmpfilterの紹介御礼 - http://rubikitch.com/に移転しましたxmpfilterの紹介御礼とあったので、
そもそもxmpfilterって何さ?って思って
Vim+xmpfilterでirbいらずのRuby試行錯誤開発 - ナレッジエースで解説されている通りインストール

sudo gem install rcodetools 

なんかインストのメッセージに
gem install fastriもした方が良いよって出たので

sudo gem install fastri

も実行。
そしてREADME.vimに書いてあった内容をvimrcに追記。
下の様な感じ。

let g:RCT_toggle_binding="<C-X><C-t>"  " use ^X^T to go test <=> implementation
let g:rct_completion_use_fri = 1  " 0 by default (disabled)
let g:rct_completion_info_max_len = 20
"
" plain annotations
map <silent> <F10> !xmpfilter -a<cr>
nmap <silent> <F10> V<F10>
imap <silent> <F10> <ESC><F10>a

" Test::Unit assertions; use -s to generate RSpec expectations instead
map <silent> <S-F10> !xmpfilter -u<cr>
nmap <silent> <S-F10> V<S-F10>
imap <silent> <S-F10> <ESC><S-F10>a

" Annotate the full buffer
" I actually prefer ggVG to %; it's a sort of poor man's visual bell
nmap <silent> <F11> mzggVG!xmpfilter -a<cr>'z
imap <silent> <F11> <ESC><F11>

" assertions
nmap <silent> <S-F11> mzggVG!xmpfilter -u<cr>'z
imap <silent> <S-F11> <ESC><S-F11>a

" Add # => markers
vmap <silent> <F12> !xmpfilter -m<cr>
nmap <silent> <F12> V<F12>
imap <silent> <F12> <ESC><F12>a

" Remove # => markers
vmap <silent> <S-F12> ms:call RemoveRubyEval()<CR>
nmap <silent> <S-F12> V<S-F12>
imap <silent> <S-F12> <ESC><S-F12>a

function! RemoveRubyEval() range
  let begv = a:firstline
  let endv = a:lastline
  normal Hmt
  set lz
  execute ":" . begv . "," . endv . 's/\s*# \(=>\|!!\).*$//e'
  normal 'tzt`s
  set nolz
  redraw
endfunction

F-12で#=>をつけてくれてF10で今の行でxmpfilter実行、F11で全体を実行。
便利ですねー。
そして自動のテスト作成ツールの方もREADME.jaに書いてあった。

== Test::Unit assert 文生成

すでにできあがっているプログラムのテストスクリプトを書くのは面倒ですね。

def test_insertion
@o.insert "bar"
@o.insert "baz"
@o.size # =>
@o.last # =>
@o.first # =>
@o.complex_computation # =>
@o.last(2) # =>
end

xmpfilter(-u オプション)が手間を軽減してくれます。

def test_insertion
@o.insert "bar"
@o.insert "baz"
assert_equal(2, @o.size)
assert_equal("baz", @o.last)
assert_equal("bar", @o.first)
assert_in_delta(3.14159265358979, @o.complex_computation, 0.0001)
assert_equal(["baz", "bar"], @o.last(2))
end

何この便利ツール。
素敵すぎるですよ。