Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

tmuxと

この2つを組み合わせて使うとvimからRSpecで書いたexampleを実行するのが超楽になります

とりあえず新しいプラグインを見つけた時に一番最初に気になる「NANIができんねん!??!?!?!」

というのは言葉ではなく実際に見てみないとわからないのでgifを貼ります

といった具合に

  • RSpecをvimから実行出来る
  • 実行処理は™uxの別paneが自動的に開いてそこで
  • 実行後vimのquickfixで結果を表示

してくれます。個人的には痒いところに手が届く感じがしてすごいいいです。

もちろんカーソルから一番近いexample1個だけを実行も出来ます

何が起こったかの流れ

vim-rspecを入れることによって実行できる

VimL
:call RunCurrentSpecFile():call RunNearestSpec():call RunLastSpec():call RunAllSpecs()

のコマンドの内どれかを実行

vim-rspec側の設定でvim-dispatchを入れることによって入るDispatchコマンドにrspecコマンドを渡して実行

vim-dispatchはtmuxが起動してると自動的に別paneを開いて実行してくれる

vim-dispatchが実行結果をquickfix上で表示してくれる

といった感じになります。

設定方法

インストール

VimL
NeoBundle 'tpope/vim-dispatch'
NeoBundle 'thoughbot/vim-rspec'

僕のように遅延ロードして少しでもvim起動を速くしたい人は

VimL
NeoBundleLazy 'thoughtbot/vim-rspec', {
                \ 'depends'  : 'tpope/vim-dispatch',
                \ 'autoload' : { 'filetypes' : ['ruby'] }
              \ }

設定

let g:rspec_command = "Dispatch rspec {spec}"

とすることによってvim-rspecによって入るコマンドを叩いたらrspecコマンドをDispatchコマンドに渡して実行できます。

NeoBundleLazyを使用してる方は

VimL
lets:bundle = neobundle#get('vim-rspec')function!s:bundle.hooks.on_source(bundle)letg:rspec_command ='Dispatch rspec {spec}'endfunction

になります。

ちなみに僕はRSpec 1.Xを使用してるプロジェクトもあるので

VimL
lets:bundle = neobundle#get('vim-rspec')function!s:bundle.hooks.on_source(bundle)if executable('rspec')letg:rspec_command ='Dispatch rspec {spec}'elseif executable('spec')letg:rspec_command ='Dispatch spec {spec}'endifendfunction

としてます。

おまけ

zeusも使ってる人は

let g:rspec_command = "Dispatch zeus rspec {spec}"

とすればzeusの恩恵ももちろん受けれます、便利!

キーバインド

僕は以下のように設定してます

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>