月曜日までに考えておきます

ITネタとゲームネタ中心に興味のあること色々書きます。

Vimの設定をRuby向けにパワーアップさせてました

Ruby on Railsの開発にVimを活用しているのですが、より便利に使いこなしてみようと先週一週間ほど調べてました。

そのまとめ。

もう便利に使っていたプラグイン

  • Vundle
  • NERDTree
  • Vim-Indent-Guide

 

■Vundle

プラグインの導入・削除を快適に管理してくれるプラグイン。
Zipで落としてきて特定のフォルダにほり込んで、要らなくなったら削除して・・・という作業から開放されます。
Vim-users.jp - Hack #215: Vundle で plugin をモダンに管理する

 

■NERDTree

EclipseXcode,VisualStudioのように、エディタの左側にディレクトリツリーを表示してくれるプラグイン。

Vundle入れていれば、

Bundle 'The-NERD-tree'

を.vimrcに書いてBundleInstallすればOKです。

 

 

Vim-Indent-Guide

半角スペースに縦線入れていまの自分の位置を見やすくしてくれるプラグイン。ifとかdoの閉じ忘れを見つけやすいです。

 

これらを入れたうえ、Mac-Vim-KaoriYaを使っていたのでいろいろ便利な設定がすでにされていて、充分に捗っていたのですが、さらに効率化しようと新たなプラグインの導入に挑戦しました。
 

新しく入れたもの

Rails.vim

正確に言うと、当然すぐ入れてたんですが何故か途中からエラーが出るようになってました。おそらくVundleを使い始めた辺りから。

.vimrcに以下のように書いたらちゃんと入りました。

Bundle 'git://github.com/tpope/vim-rails.git'

できること

  • クラス名とかにカーソル合わせて、'gf' でそのモデルのファイルに移動。
  • Rmodel,RView,Rcontrollerでそれぞれのファイルに移動など。

 

vim_railscasts

textmateっぽいカラーになる。見やすい。たぶんgvimじゃないと完全に反映されない?

TerminalやiTerm2から使っても色が反映されませんでした。

Bundle 'git://github.com/jpo/vim-railscasts-theme.git'

 

neocomplcache

とにかく捗る自動補完。EclipseXcodeもこれがあるからもっさりしてても許せる気がします。

インストールは

Bundle 'neocomplcache'

Bundle 'Shougo/unite.vim'

ただし、Rubyの場合は補完は完全ではない模様。

自分の入力した値や同じファイルで使われている表現から持ってくることしかできない(のかな?)

たとえば、RailsActiveRecord::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キーで(※)
※補完候補にsnipが出たとき、Enterで選択されますがsnippet補完まではされません。さらにsnippet展開キーを押すことで展開されるという仕様です。

補完に使うキーとかは完全に好みなのでお好きに設定してく