LoginSignup
17
14

More than 5 years have passed since last update.

RSpec3.0.0をvim-quickrunとvimprocで行指定実行

Last updated at Posted at 2014-06-12

RSpec3.0.0になってrspecコマンドの-lオプションがなくなりました。
vim-quickrunとvimprocでrspecコマンドを実行しているのですが、オプションがなくなったためRSpecファイルを編集中にカーソルがある行を指定して実行するときにエラーが出るようになりました。

今までの設定は以下のようにしていました。(quickrunの設定部分を抜粋)

.vimrc
"===========================================
" quickrun settings
"===========================================
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!
  autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
fun! QRunRspecCurrentLine()
  let line = line(".")
  exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
endfun

QRunRspecCurrentLine関数でrspecコマンドを行指定で実行しているのですが、上記の設定だとRSpec3.0.0にすると行指定実行したときに以下のようなエラーが出力されます。

invalid option: -l

Please use --help for a listing of valid options

rspecコマンドのヘルプを見ると

  **** Filtering/tags ****

    In addition to the following options for selecting specific files, groups,
    or examples, you can select a single example by appending the line number to
    the filename:

      rspec path/to/a_spec.rb:37

とあるので、ファイル名の後にコロンと行番号をつけてやればよさそうです。

なので、以下のように設定を変更しました。

diff形式で示します。

.vimrc
"================================================================================
" quickrun settings
"================================================================================
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!
  autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
fun! QRunRspecCurrentLine()
  let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
+ exe ":QuickRun -exec '%c %s%o' -cmdopt ':" . line . " -cfd'"
endfun

具体的にはコマンド実行の書式を変更しました。

bundlerを使用している場合は以下のように設定してください。

.vimrc
 "===========================
 " quickrun settings
 "===========================
  let g:quickrun_config = {}
  let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
- let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}
+ let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'exec': 'bundle exec %c', 'cmdopt': '-cfd'}

  augroup QRunRSpec
    autocmd!
    autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
  augroup END

  nnoremap [quickrun] <Nop>
  nmap <Space>k [quickrun]
  nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
  fun! QRunRspecCurrentLine()
    let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
+ exe ":QuickRun -exec 'bundle exec %c %s%o' -cmdopt ':" . line . " -cfd'"
endfun

詳しくはヘルプをご覧ください。
:h quickrun-option-exec

これでRSpec3でもファイルを編集中に行指定のテスト実行ができるようになります。

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14