tmuxと
この2つを組み合わせて使うとvimからRSpecで書いたexampleを実行するのが超楽になります
とりあえず新しいプラグインを見つけた時に一番最初に気になる**「NANIができんねん!??!?!?!」**
というのは言葉ではなく実際に見てみないとわからないのでgifを貼ります
といった具合に
- RSpecをvimから実行出来る
- 実行処理は™uxの別paneが自動的に開いてそこで
- 実行後vimのquickfixで結果を表示
してくれます。個人的には痒いところに手が届く感じがしてすごいいいです。
もちろんカーソルから一番近いexample1個だけを実行も出来ます
何が起こったかの流れ
vim-rspecを入れることによって実行できる
:call RunCurrentSpecFile()
:call RunNearestSpec()
:call RunLastSpec()
:call RunAllSpecs()
のコマンドの内どれかを実行
↓
vim-rspec側の設定でvim-dispatchを入れることによって入るDispatch
コマンドにrspec
コマンドを渡して実行
↓
vim-dispatchはtmuxが起動してると自動的に別paneを開いて実行してくれる
↓
vim-dispatchが実行結果をquickfix上で表示してくれる
といった感じになります。
設定方法
インストール
NeoBundle 'tpope/vim-dispatch'
NeoBundle 'thoughtbot/vim-rspec'
僕のように遅延ロードして少しでもvim起動を速くしたい人は
NeoBundleLazy 'thoughtbot/vim-rspec', {
\ 'depends' : 'tpope/vim-dispatch',
\ 'autoload' : { 'filetypes' : ['ruby'] }
\ }
設定
let g:rspec_command = "Dispatch rspec {spec}"
とすることによってvim-rspecによって入るコマンドを叩いたらrspec
コマンドをDispatch
コマンドに渡して実行できます。
NeoBundleLazy
を使用してる方は
let s:bundle = neobundle#get('vim-rspec')
function! s:bundle.hooks.on_source(bundle)
let g:rspec_command = 'Dispatch rspec {spec}'
endfunction
になります。
ちなみに僕はRSpec 1.Xを使用してるプロジェクトもあるので
let s:bundle = neobundle#get('vim-rspec')
function! s:bundle.hooks.on_source(bundle)
if executable('rspec')
let g:rspec_command = 'Dispatch rspec {spec}'
elseif executable('spec')
let g:rspec_command = 'Dispatch spec {spec}'
endif
endfunction
としてます。
おまけ
zeusも使ってる人は
let g:rspec_command = "Dispatch zeus rspec {spec}"
とすればzeusの恩恵ももちろん受けれます、便利!
キーバインド
僕は以下のように設定してます
nmap <silent><leader>c :call RunCurrentSpecFile()<CR>
nmap <silent><leader>n :call RunNearestSpec()<CR>
nmap <silent><leader>l :call RunLastSpec()<CR>
nmap <silent><leader>a :call RunAllSpecs()<CR>
まとめ
guardも使用してるんですが、guardでは個別のexampleを実行するいい方法が見つからず、この方法に行き着きました。
vim-dispatchはvim-rspecと組み合わせて使う以外にも色々と便利な使い道があるので一度READMEをみてみるといいかもしれません