Posted at

[Vim] Vim に Language Server Protocol クライアント機能を導入して Rubyの補完機能を復活させた

More than 1 year has passed since last update.

YouCompleteMe をしばらく前から使っていました。最近、MacOSXな環境で、Rubyの補完がうまく動かなくて、 . を入力した瞬間、 vim が死亡するようになってしまいました。原因は良くわかりません。とりあえず、死ぬのは困るので、 --disable-rubyinterp で、Vimをビルドしてました。

YouCompleteMe で、Ruby の補完ができなくなってしまったので、何か他に良い方法ないかとあちこちのサイトを眺めていて、 deoplete.nvimLanguageClient-neovimsolargraph を組み合わせたら、行けるんじゃないかと思い、試してみました。


deoplete.nvim

deoplete.nvim をインストールします。


.vimrc

if has('nvim')

Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
let g:deoplete#enable_at_startup = 1


LanguageClient-neovim

LanguageClient-neovim は、Neovimやvim を language server protocol(LSP) に対応させるためのスクリプトです。


.vimrc

Plug 'autozimu/LanguageClient-neovim', {

\ 'branch': 'next',
\ 'do': 'bash install.sh',
\ }

" (Optional) Multi-entry selection UI.
Plug 'junegunn/fzf'



設定の追加

起動時に deoplete を有効にして、Rubyスクリプトを編集するときは、 solargraph が LSPサーバーとして動作するように設定します。


.vimrc

let g:deoplete#enable_at_startup = 1

let g:LanguageClient_serverCommands = {
\ 'ruby': ['solargraph', 'stdio'],
\}
call deoplete#custom#var('omni', 'input_patterns', {
\ 'ruby': ['[^. *\t]\.\w*', '[a-zA-Z_]\w*::'],
\})


Python3 interface のインストール

Python3 interface をインストールします。

$ pip3 install neovim


solargraph のインストール

$ gem install solargraph

$ yard gems
$ yard config --gem-install-yri


動作確認

.rbファイルを開いて、 cl と入力すると以下のような候補が表示されます。

2018-07-14-140807_536x203_scrot.png


おわりに

もっと、色々いじると便利になるのかも知れませんが、今のところ、こんな感じで様子を見たいと思います。

他の言語でも LSPなサーバーをインストールすれば、同じように使えると思いますが、そこは様子を見ながら切り替えたいと思います。