vimでRuby on Railsを書くときに重宝するプラグインを紹介します。
- NERDTree ファイルツリー
- vim-rails ファイル移動、Railsコマンド実行
- fzf.vim インクリメンタル検索
- vim-endwise
if
やdef
などのend
補完 - coc.nvim 補完
- ale 静的解析
- ruby-matchit
%
によるdef...end等のキーワードを移動
設定例として、自分の.vimrc
に書いている設定を載せてます。
NERDTree
scrooloose/nerdtree
ファイルツリー機能が使えます。ド定番です。
参考
vim-plugin NERDTree で開発効率をアップする! @zwirky
vim-rails
tpope/vim-rails
railsプロジェクト内のシームレスな移動や、vimからのrailsコマンドの実行が出来るようになります。
GIFでは例として、gf
でカーソル化の文字列から該当するファイルを開き、:A
で対応するspec
ファイルを開いています。
参考
vim-rails よく使いそうなやつ @bibio
fzf.vim
junegunn/fzf.vim
Go言語製の fzfと呼ばれるコマンドラインツールを使用したプラグインで、プロジェクト内のファイル名や、ソースコードの文字列あいまい検索ができます。
letg:fzf_action={ \'ctrl-s':'split'}
nnoremap <C-p>:FZFFileList<CR>
command! FZFFileList call fzf#run(fzf#wrap({ \'source':'find . -type d -name .git -prune -o ! -name .DS_Store', \'down':'40%'}))
nnoremap <C-b>:Buffers<CR>
nnoremap <C-g>:Ag<CR>
nnoremap <silent><C-]>:call fzf#vim#tags(expand('<cword>'))<CR>letg:fzf_buffers_jump=1
command!-bang -nargs=? -complete=dir Files
\call fzf#vim#files(<q-args>, fzf#vim#with_preview(),<bang>0)
GIFでは ctrl
+ p
でファイル名検索、ctrl
+ b
でバッファー検索をしています。
ctagsとの連携なんかもできちゃいます。
fzf.vim
はプラグイン本体に加えて fzf
そのもののインストールも必要になりますが、fzf
は vim
抜きにしてもコマンドラインツールとしてとても優秀なのでオススメです。
参考
fzfとvimで少ない労力で作業効率を引き上げた話 @Sa2Knight
さいつよのターミナル環境を構築しよう @b4b4r07
ファイル検索プラグインの別の選択肢としてdenite.nvim(unite.vimのつよいやつ)というプラグインがあります。
もっと複雑な処理を走らせたい方におすすめです。(あんまりわかってない)
vim-endwise
tpope/vim-endwisedef
...end
や、if
...end
などの対応するキーワードを自動補完してくれます。
地味にきいてくる便利さです。
coc.nvim
neoclide/coc.nvimcoc.nvim
は TypeScript
製の補間プラグインです。LanguageServerProtocol(以下LSP)
と呼ばれる、コーディング支援用のプロトコルが使用可能で、強力な補完機能が使えます。ruby
の場合、 solargraphと呼ばれるLSPの gem
を使用します。
coc.nvim
は、 独自の設定ファイルとして .vim/coc-settings.json
を使用します。
{"suggest.enablePreselect":true,"solargraph.commandPath":"solargraphの絶対パス"}
letg:coc_global_extensions=['coc-solargraph']
inoremap <silent><expr><TAB> \ pumvisible() ? "\<C-n>": \<SID>check_back_space() ? "\<TAB>": \ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>":"\<C-h>"function!s:check_back_space() abort
letcol=col('.')-1return!col|| getline('.')[col-1]=~# '\s'endfunction
右に[LS]と表記されている単語が、LSPによる補完候補です。
めっちゃ出ます。
参考
LanguageServerProtocol(LSP)のススメ @himanoa
neovim + coc.nvim で LSP藻ログ
coc.nvim
の他にも、asyncomplete + vim-lspや、 deoplete + LanguageClient-neovimの組み合わせでもLSPの補完が使えます。
ale
w0rp/ale
gem
のrubocop
構文エラーを自動で非同期静的解析してくれるツールです。
letg:ale_fixers={ \'ruby':['rubocop'], \}
if
...end
のend
を消すと構文エラーを指摘してくれます。
言語ごとにfix, lintツールを指定するとruby
以外でも大活躍してくれます。
参考
neovim + 🍻ale + 🚓rubocop hoshinotsuyoshi.com
ruby-matchit
vim-scripts/ruby-matchit
%を拡張して、def...end等のキーワードを移動出来るようになります。
まとめ
他にも良いプラグインがあれば教えてください
それではよい vim, rails ライフを…