vimでRuby on Railsを書くときに重宝するプラグインを紹介します。
- NERDTree ファイルツリー
- vim-rails ファイル移動、Railsコマンド実行
- fzf.vim インクリメンタル検索
-
vim-endwise
if
やdef
などのend
補完 - coc.nvim 補完
- ale 静的解析
設定例として、自分の.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 と呼ばれるコマンドラインツールを使用したプラグインで、プロジェクト内のファイル名や、ソースコードの文字列あいまい検索ができます。
let g: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>
let g: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で少ない労力で作業効率を引き上げた話]
(https://qiita.com/Sa2Knight/items/6635af9fc648a5431685) @Sa2Knight
さいつよのターミナル環境を構築しよう @b4b4r07
ファイル検索プラグインの別の選択肢としてdenite.nvim(unite.vimのつよいやつ)というプラグインがあります。
もっと複雑な処理を走らせたい方におすすめです。(あんまりわかってない)
vim-endwise
tpope/vim-endwise
def
...end
や、if
...end
などの対応するキーワードを自動補完してくれます。
地味にきいてくる便利さです。
coc.nvim
neoclide/coc.nvim
coc.nvim
は TypeScript
製の補間プラグインです。LanguageServerProtocol(以下LSP)
と呼ばれる、コーディング支援用のプロトコルが使用可能で、強力な補完機能が使えます。
ruby
の場合、 solargraphと呼ばれるLSPの gem
を使用します。
coc.nvim
は、 独自の設定ファイルとして .vim/coc-settings.json
を使用します。
{
"suggest.enablePreselect": true,
"solargraph.commandPath": "solargraphの絶対パス"
}
let g: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
let col = col('.') - 1
return !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
構文エラーを自動で非同期静的解析してくれるツールです。
let g:ale_fixers = {
\ 'ruby': ['rubocop'],
\ }
if
...end
のend
を消すと構文エラーを指摘してくれます。
言語ごとにfix, lintツールを指定するとruby
以外でも大活躍してくれます。
参考
neovim + 🍻ale + 🚓rubocop hoshinotsuyoshi.com
まとめ
他にも良いプラグインがあれば教えてください
それではよい vim, rails ライフを…