Ruby on Railsの開発にVimを活用しているのですが、より便利に使いこなしてみようと先週一週間ほど調べてました。
そのまとめ。
もう便利に使っていたプラグイン
- Vundle
- NERDTree
- Vim-Indent-Guide
■Vundle
■NERDTree
EclipseやXcode,VisualStudioのように、エディタの左側にディレクトリツリーを表示してくれるプラグイン。
Vundle入れていれば、
Bundle 'The-NERD-tree'
を.vimrcに書いてBundleInstallすればOKです。
■Vim-Indent-Guide
半角スペースに縦線入れていまの自分の位置を見やすくしてくれるプラグイン。ifとかdoの閉じ忘れを見つけやすいです。
新しく入れたもの
正確に言うと、当然すぐ入れてたんですが何故か途中からエラーが出るようになってました。おそらくVundleを使い始めた辺りから。
.vimrcに以下のように書いたらちゃんと入りました。
できること
- クラス名とかにカーソル合わせて、'gf' でそのモデルのファイルに移動。
- Rmodel,RView,Rcontrollerでそれぞれのファイルに移動など。
■vim_railscasts
textmateっぽいカラーになる。見やすい。たぶんgvimじゃないと完全に反映されない?
TerminalやiTerm2から使っても色が反映されませんでした。
Bundle 'git://github.com/jpo/vim-railscasts-theme.git'
とにかく捗る自動補完。EclipseもXcodeもこれがあるからもっさりしてても許せる気がします。
インストールは
Bundle 'neocomplcache'
Bundle 'Shougo/unite.vim'
ただし、Rubyの場合は補完は完全ではない模様。
自分の入力した値や同じファイルで使われている表現から持ってくることしかできない(のかな?)
たとえば、RailsのActiveRecord::find がありますが、Userモデルを作っていて、"User."まで打った時に"find"が出てくれるわけではありません。
Rubyの仕様上、それの実現は難しいので今のところ無料のエディタでやれてるのはないのかな、と思います。
(※私が知らないだけの可能性有りですし、有料のエディタならできているのか、ということについても自信なしです。)
併せて、スニペット補完のプラグインも入れました。
Bundle 'https://github.com/Shougo/neocomplcache-snippets-complete'
最近、neocomplcacheとsnippetで機能がわかれたようです。
これはsnippet補完を実現するもの。
たとえば"if"を打つだけで
if [condition]
end
と出力してくれて、しかも[condition]の位置にカーソルが当たっている、ということを実現してくれます。
ある程度はSnippetファイルが最初から入っているのですが、自分でカスタマイズもできます。
たとえばRSpec用に describeと入れるだけで、以下のように保管してくれるスニペットを作りました。
describe "${1}" do
context "${2}" do
it "${3}" do
"${4}" do
end
end
end
補完用のキー(私はTabキーにしています)を押すだけで、${1}-${4}まで飛んでくれるので超便利です。
参考までに、私のneocomplcache用の設定はこんなかんじにしています。
"neocomplcache用(自動補完)
let g:neocomplcache_enable_at_startup = 1
" 区切りの補完を有効化
let g:neocomplcache_enable_underbar_completion = 1
" シンタックスをキャッシュするときの最小文字長を3
let g:neocomplcache_min_syntax_length = 3
" Enable heavy omni completion. ruby用
if !exists('g:neocomplcache_omni_patterns')
let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *¥t]¥.¥w*¥|¥h¥w*::'
autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
" 閉じ括弧を自動補完
inoremap ( ()
inoremap { {}
inoremap [ []
" 補完候補が表示されている場合は確定。そうでない場合は改行
inoremap pumvisible() ? neocomplcache#close_popup() : "¥"
" snippetを
にマッピング imap
neocomplcache#sources#snippets_complete#expandable() ? "\ (neocomplcache_snippets_expand)" : pumvisible() ? "\ " : "\ " " 1番目の候補を自動選択
let g:neocomplcache_enable_auto_select = 1
" エディットのエイリアス
noremap snip :
NeoComplCacheEditSnippets " スニペット保管場所
let g:neocomplcache_snippets_dir = '~/.vim/snippets'
" 補完をキャンセル
inoremap
neocomplcache#cancel_popup() inoremap
pumvisible() ? neocomplcache#cancel_popup() : "\ "
一部、neocomplcacheと関係なかったりしますが(;^ω^)
やってる主なこととして
- 補完候補が出てきたら一番目を自動選択してEnterで撰択
- snippetファイルのエディットに入るコマンドが長いので、入力モードじゃない時に"snip"でsnippet編集画面へ
- snippet展開はTabキーで(※)
補完に使うキーとかは完全に好みなのでお好きに設定してく