33
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

VimmerがRuby on Railsを書くときに使えるVimプラグイン集 2019

vimでRuby on Railsを書くときに重宝するプラグインを紹介します。

  • NERDTree   ファイルツリー
  • vim-rails    ファイル移動、Railsコマンド実行
  • fzf.vim     インクリメンタル検索
  • vim-endwise  ifdef などの end 補完
  • coc.nvim    補完
  • ale       静的解析

設定例として、自分の.vimrcに書いている設定を載せてます。

NERDTree

scrooloose/nerdtree
ファイルツリー機能が使えます。ド定番です。
nerdtree2.mov.gif

参考
vim-plugin NERDTree で開発効率をアップする! @zwirky

vim-rails

tpope/vim-rails

railsプロジェクト内のシームレスな移動や、vimからのrailsコマンドの実行が出来るようになります。
vimrails.mov.gif

GIFでは例として、gfでカーソル下の文字列から該当するファイルを開き、:Aで対応するspecファイルを開いています。

参考
vim-rails よく使いそうなやつ @bibio

fzf.vim

junegunn/fzf.vim

Go言語製の fzf と呼ばれるコマンドラインツールを使用したプラグインで、プロジェクト内のファイル名や、ソースコードの文字列あいまい検索ができます。

.vimrc
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)

fzf.mov.gif

GIFでは ctrl + p でファイル名検索、ctrl + bでバッファー検索をしています。
ctagsとの連携なんかもできちゃいます。

fzf.vim はプラグイン本体に加えて fzfそのもののインストールも必要になりますが、
fzfvim 抜きにしてもコマンドラインツールとしてとても優秀なのでオススメです。

参考
fzfとvimで少ない労力で作業効率を引き上げた話 @Sa2Knight
さいつよのターミナル環境を構築しよう @b4b4r07

ファイル検索プラグインの別の選択肢としてdenite.nvim(unite.vimのつよいやつ)というプラグインがあります。
もっと複雑な処理を走らせたい方におすすめです。(あんまりわかってない)

vim-endwise

tpope/vim-endwise
def...endや、if...endなどの対応するキーワードを自動補完してくれます。

endwise.mov.gif

地味にきいてくる便利さです。

coc.nvim

neoclide/coc.nvim
coc.nvimTypeScript 製の補間プラグインです。LanguageServerProtocol(以下LSP)と呼ばれる、コーディング支援用のプロトコルが使用可能で、強力な補完機能が使えます。
ruby の場合、 solargraphと呼ばれるLSPの gem を使用します。

coc.nvim は、 独自の設定ファイルとして .vim/coc-settings.json を使用します。

coc-settings.json
{
  "suggest.enablePreselect": true,
  "solargraph.commandPath": "solargraphの絶対パス"
}
.vimrc
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

coc.mov.gif

右に[LS]と表記されている単語が、LSPによる補完候補です。
めっちゃ出ます。

参考
LanguageServerProtocol(LSP)のススメ @himanoa
neovim + coc.nvim で LSP 藻ログ

coc.nvim の他にも、asyncomplete + vim-lsp や、 deoplete + LanguageClient-neovim の組み合わせでもLSPの補完が使えます。

ale

w0rp/ale

gemrubocop構文エラーを自動で非同期静的解析してくれるツールです。

.vimrc
let g:ale_fixers = {
      \ 'ruby': ['rubocop'],
      \ }

ale.mov.gif

if...endendを消すと構文エラーを指摘してくれます。

言語ごとにfix, lintツールを指定するとruby以外でも大活躍してくれます。

参考
neovim + 🍻ale + 🚓rubocop hoshinotsuyoshi.com

まとめ

他にも良いプラグインがあれば教えてください
それではよい vim, rails ライフを…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
33
Help us understand the problem. What are the problem?