Help us understand the problem. What is going on with this article?

tmuxとvim-rspecとvim-dispatchで快適なRSpec生活

More than 5 years have passed since last update.

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をみてみるといいかもしれません

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away