RSpec3.0.0になってrspecコマンドの-lオプションがなくなりました。
vim-quickrunとvimprocでrspecコマンドを実行しているのですが、オプションがなくなったためRSpecファイルを編集中にカーソルがある行を指定して実行するときにエラーが出るようになりました。
今までの設定は以下のようにしていました。(quickrunの設定部分を抜粋)
.vimrc
"===========================================" quickrun settings"===========================================letg:quickrun_config = {}
letg:quickrun_config._ = {'runner' : 'vimproc',"runner/vimproc/updatetime" : 10}
letg:quickrun_config['ruby.rspec'] = {'command': 'rspec','cmdopt': '-cfd'}
augroup QRunRSpec
autocmd!autocmdBufWinEnter,BufNewFile *_spec.rb setfiletype=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
とあるので、ファイル名の後にコロンと行番号をつけてやればよさそうです。
なので、以下のように設定を変更しました。
.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でもファイルを編集中に行指定のテスト実行ができるようになります。