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


# Rsenseとは？

オリジナル開発者の説明によれば、
> RSenseはEmacsやVimなどの高機能テキストエディタに特化したRubyのための開発援助ツールです。UNIXの思想に従うことで高い透明性を実現し、ユーザーが簡単に学習・拡張・修正できるように設計されています。また、コピーレフトライセンス（GPLv3+）を採用することで、自由なソフトウェアであり続けることを保証しています。
> <div style="text-align:right;"> --- [RSense \- ユーザーマニュアル](https://web.archive.org/web/20150311151946/http://cx4a.org/software/rsense/manual.ja.html)</div>


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

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

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

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


# Vim とどう組み合わせるのか？
下記の構成になります。

 - Vim
 - dein - プラグインマネージャ
 - [rsense/rsense](https://github.com/rsense/rsense) - Gemで導入
 - [Shougo/neocomplcache\.vim](https://github.com/Shougo/neocomplcache.vim) - Vimの補完プラグイン。deinを利用して導入
 - [Shougo/neocomplcache\-rsense\.vim](https://github.com/Shougo/neocomplcache-rsense.vim) - neocomplecacheとRsenseを組み合わせるためのプラグイン

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

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

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



# 手順
1. Rsenseをインストール
`$ gem install rsense`

2. Rsenseのインストールパスを取得
`$ which rsense`

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

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

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

```vim:.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](https://qiita-image-store.s3.amazonaws.com/0/39515/be69a9e2-0ab9-3cb8-0f8a-9de041903754.gif)



# 参考リンク
 - [rsense/rsense: Rsense Can See All](https://github.com/rsense/rsense)
 - [Rubyプログラミングが快適になるVim環境を0から構築する \- Qiita](http://qiita.com/mogulla3/items/42a7f6c73fa4a90b1df3)
 - [VimでRSenseを使って快適Rubyプログラミング \- NigoroJr](http://nigorojr.com/articles/19)
 - [RSense \- ユーザーマニュアル](https://web.archive.org/web/20150311151946/http://cx4a.org/software/rsense/manual.ja.html)（オリジナル作者による公式マニュアルのアーカイブ）