読者です 読者をやめる 読者になる 読者になる

RSenseを使ってVimをIDEっぽくする(Ruby向け)

Vim Ruby

はじめに

夏休みの間、普段とは別のバイト先でIntelliJ+Spray(Scala)で開発をしていたんですが、 IDE+静的型付け言語の組み合わせって色々補完してくれていいなあと思いました。

で、Vim+Railsでも同じことやりたい!*1と思って色々調べたら、neocompleteとRSenseを組み合わせることで、"Rubyに関しては"結構いい感じにできることがわかりました。
以下、備忘録を兼ねたまとめです。

RSenseとは

以下のデモ動画のように、レシーバーのクラスに応じてメソッド名を入力補完できたり*2します。
ちなみに未踏プロジェクトの成果物だそうです。やっぱ未踏の人たちはすごい。


RSense - The most useful development tools for Ruby ...

必要なもの

Macで既に以下の4つを導入していることを前提に説明します。知らないものがあれば適宜検索を。

やり方

RSenseをインストール

brew install rsense
ruby /usr/local/Cellar/rsense/0.3/libexec/etc/config.rb > ~/.rsense

Vimの設定

.vimrcに以下の記述を追加します。

NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
  \     'mac' : 'make -f make_mac.mak',
  \     'unix' : 'make -f make_unix.mak',
  \    },
  \ }
NeoBundleLazy 'supermomonga/neocomplete-rsense.vim', { 'autoload' : {
  \ 'insert' : 1,
  \ 'filetypes': 'ruby',
  \ }}

" .や::を入力したときにオムニ補完が有効になるようにする
if !exists('g:neocomplete#force_omni_input_patterns')
  let g:neocomplete#force_omni_input_patterns = {}
endif
let g:neocomplete#force_omni_input_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'

" 環境変数RSENSE_HOMEに'/usr/local/bin/rsense'を指定しても動く
let g:neocomplete#sources#rsense#home_directory = '/usr/local/bin/rsense'

動作確認

vim test.rbとかで新しいファイルを作って、その中で1.と入力した時点で自動で補完されればOKです。
さらに入力することで、候補が絞り込まれます。以下は1.tまで入力した場合です。

f:id:Yasaichi:20141007102007p:plain

おわりに

Railsメソッドとか補完するいいやり方があれば教えてください(結局解決してない)。

参考

*1:もうVimじゃなくてIDE使えよっていう突っ込みはなしで

*2:他にも、型検査や定義元ジャンプができるみたいです