Edited at

Rsense(rsense/rsense)を利用してVimでRubyの補完を実現する

More than 1 year has passed since last update.


Rsenseとは?

オリジナル開発者の説明によれば、


RSenseはEmacsやVimなどの高機能テキストエディタに特化したRubyのための開発援助ツールです。UNIXの思想に従うことで高い透明性を実現し、ユーザーが簡単に学習・拡張・修正できるように設計されています。また、コピーレフトライセンス(GPLv3+)を採用することで、自由なソフトウェアであり続けることを保証しています。



ようするに、Ruby言語用の賢い補完候補提供ツール になります。

オリジナル開発者版とは別にいくつかバージョンがありますが、現在は、GitHub:rsense/rsense: Rsense Can See Allにてメンテされているようです。

このバージョンとVimのプラグイン管理アプリであるdeinとの組み合わせでどんぴしゃの解説が見当たらず、試行錯誤して出来るようになったので、簡単にまとめます。

なお、私の環境は、Macです。


Vim とどう組み合わせるのか?

下記の構成になります。

補完プラグインであるneocomplecacheは、すでに後継のShougo/neocomplete.vimに開発が移行して久しいですが、rsenseと組み合わせて使うプラグインは、neocompleteだと現在無く、neocomplecacheだとあるためです。

また、私自身がneocompleteとneocomplecacheの違いが分からないままneocomplecacheの方を使っていたという事情もあります。

現在、Rubyの補完用Vimプラグインとしては、osyo-manga/vim-monster: Ruby code completion.の方をおすすめされることも多いようで、こちらは公式にneocompleteに対応しています。


手順


  1. Rsenseをインストール

    $ gem install rsense


  2. Rsenseのインストールパスを取得

    $ which rsense


  3. 返ってきたRsenseのインストールパスをコピーする


  4. .vimrcに以下のように記述


(すでにご自身で書いてあるものなどは飛ばしてください。また、設定は好みで変えてください。)


.vimrc

" dein

" Vim起動完了時にインストール
augroup PluginInstall
autocmd!
autocmd VimEnter * if dein#check_install() | call dein#install() | endif
augroup END

" 各プラグインをインストールするディレクトリ
let s:plugin_dir = expand('~/.vim/')

" dein.vimをインストールするディレクトリをランタイムパスへ追加
let s:dein_dir = s:plugin_dir . 'repos/github.com/Shougo/dein.vim'
execute 'set runtimepath+=' . s:dein_dir

" dein.vimがまだ入ってなければ 最初に git clone
if !isdirectory(s:dein_dir)
call mkdir(s:dein_dir, 'p')
silent execute printf('!git clone %s %s', 'https://github.com/Shougo/dein.vim', s:dein_dir)
endif

"dein plugin settings
if dein#load_state(s:plugin_dir)
call dein#begin(s:plugin_dir)
endif

" ここからインストールするプラグイン
call dein#add('Shougo/dein.vim')
call dein#add('Shougo/neocomplcache.vim')
call dein#add('Shougo/neocomplcache-rsense.vim')

" neocomplcacheの設定
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0

" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1

" Use smartcase.
let g:neocomplcache_enable_smart_case = 1

" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

let g:neocomplcache_enable_camel_case_completion = 1
let g:neocomplcache_enable_underbar_completion = 1

" Rsense用の設定
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

"rsenseのインストールフォルダがデフォルトと異なるので設定
let g:rsenseHome = expand("*Rsenseのインストールパスをここにペースト*")
let g:rsenseUseOmniFunc = 1



こんな感じ

screencast 2016-09-22 01-14-49.gif


参考リンク