quickrun.vimで実行したRSpecの結果に色をつける

quickrunを使ってrspecを実行すると、出力結果に色がつかず見づらい。
色をつけるために「-c」オプションを追加してみたけれど、色はつきませんでした。

そこで色々調べていたら、以下の記事を発見。

この記事で扱っているのはPHPUnitの設定ですが、
PHPUnitでできるならRSpecでもできるだろ!!」
と思い試してみました。

quickrunで実行したRSpecに色をつける方法

以下の設定を.vimrcに追加。

let g:quickrun_config = {}

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

let rspec_outputter = quickrun#outputter#buffer#new()
function! rspec_outputter.init(session)
  call call(quickrun#outputter#buffer#new().init,  [a:session],  self)
endfunction

function! rspec_outputter.finish(session)
  highlight default RSpecGreen ctermfg = Green cterm = none
  highlight default RSpecRed    ctermfg = Red   cterm = none
  highlight default RSpecComment ctermfg = Cyan  cterm = none
  highlight default RSpecNormal  ctermfg = White cterm = none
  call matchadd("RSpecGreen", "^[\.F]*\.[\.F]*$")
  call matchadd("RSpecGreen", "^.*, 0 failures$")
  call matchadd("RSpecRed", "F")
  call matchadd("RSpecRed", "^.*, [1-9]* failures.*$")
  call matchadd("RSpecRed", "^.*, 1 failure.*$")
  call matchadd("RSpecRed", "^ *(.*$")
  call matchadd("RSpecRed", "^ *expected.*$")
  call matchadd("RSpecRed", "^ *got.*$")
  call matchadd("RSpecRed", "^ *Failure/Error:.*$")
  call matchadd("RSpecRed", "^.*(FAILED - [0-9]*)$")
  call matchadd("RSpecRed", "^rspec .*:.*$")
  call matchadd("RSpecComment", " # .*$")
  call matchadd("RSpecNormal", "^Failures:")
  call matchadd("RSpecNormal", "^Finished")
  call matchadd("RSpecNormal", "^Failed")

  call call(quickrun#outputter#buffer#new().finish,  [a:session], self)
endfunction

call quickrun#register_outputter("rspec_outputter", rspec_outputter)
let g:quickrun_config['ruby.rspec'] = { 
      \ 'command': 'rspec',
      \ 'outputter': 'rspec_outputter',
      \ }

出力結果

とりあえずquickrunで実行したRSpecに色がつくようになりました。

  • Green


  • Red

この記事書いてる途中で気づきましたがまだpendingはなにも色付けしてません。
あとhighlightの設定等あまりに賢くないので、もしアドバイス等あればどしどしお願いします。