RSense

前回、うまく動作しないと言っていた RSense ですが、あのあと色々と試してみて動作したので覚書。

[動作環境]

[ftplugin/ruby.vim]

if !exists('g:neocomplcache_omni_patterns')
  let g:neocomplcache_omni_patterns = {}
endif
let g:rsenseUseOmniFunc = 1
if filereadable(expand($RSENSE_HOME.'/bin/rsense'))
  let g:rsenseHome = $RSENSE_HOME
  let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
endif


" RSense Service の開始と終了
if !exists("s:service_started")
    let s:service_started=0
endif

function! s:service_start()
    if !s:service_started
        RSenseServiceStart
        let s:service_started=1
    endif
endfunction
call s:service_start()

function! s:service_stop()
    if s:service_started
        RSenseServiceStop
        let s:service_started=0
    endif
endfunction

augroup ftplugin-ruby
    autocmd!
    autocmd VimLeave <buffer> call <SID>service_stop()
augroup END

[オムニ補完]


こんな感じで、変数の型を考慮した補完が出来るみたいですね。
補完速度に関しては、補完時にコマンドの呼び出しが入るのでめちゃくちゃ早いとは言えませんが、それでも思ったよりは早い感じですね。
まぁ規模が大きくなるともっと補完速度が遅くなってくるかも知れませんが。


上記の場合では set filetype=ruby 時にサービスを開始して、Vim の終了時にサービスが終了するようにしています。
まぁ Vim と関係なく、RSense のサービスはずーっと起動していてもいいとは思いますが。
あと 2つ以上の Vim を起動している場合に片方の Vim を終了させるとサービスが終了してしまうので注意して下さい。