Vim/Neovimのターミナル機能を使って瞬時にRSpecを走らせる


VimのターミナルでRSpecを実行したかったので実装してみました

(DB設定をしていないのでエラー吐いてます)

実装

kassio/neotermというVim/Neovimのターミナル機能のラッパーを使うと簡単に実装できました

neoterm#do()関数に実行したいコマンドを引数として渡すことで、ターミナルでコマンドを実行することができます

(例)開いているファイルのspecを実行する関数
let g:neoterm_rspec_cmd='bin/rspec'

function! termrspec#file() abort
    let l:filename = expand('%') " ファイルのパス取得
    call neoterm#do({ 'cmd': join([g:neoterm_rspec_cmd, l:filename]) })
endfunction

実装したコマンドはプラグインにして公開しています
ujiprog/neoterm-rspec.vim

プラグインの使い方

インストール

お使いのプラグインマネージャーにkassio/neotermuji/neoterm-rspec.vimを追記してください


[[plugins]]
repo = 'kassio/neoterm'

[[plugins]]
repo = 'uji/neoterm-rspec.vim'

コマンド

  • :TermRSpecAll

プロジェクト全体のRSpec実行

  • :TermRSpecFile

開いているファイルのRSpec実行

  • :TermRSpecLine

カーソルがある行のRSpec実行

  • :TermRspecFailers

--only-failuers オプションをつけたRSpecの実行

マッピングして使うと便利です

おわりに

ターミナル機能での外部コマンド実行ですが、neotermのおかげでさくっと実装できました
現状Vim/Neovimどちらでも動作するっぽいので良いですね
外部コマンドの実行、実行結果の閲覧をするプラグインを自作する場合は、neotermを使うと簡単そうです

VimでRSpecを実行する別の手段としてはthoughtbot/vim-rspecや、QuickRunでの実行などがあるのでそちらも試してみてください