一ヶ月位前にVimのプラグインの1つである neocomplete の開発終了のアナウンスがありました。
これはNeovim用の同様のプラグインとして開発されている deoplete がVim 8に対応したということからです。
アナウンスされた当初はバグ?があったりで上手く動かなかったので様子をみてましたが、 色々アップデートがて使える様になったので使える場所ではdeopleteを使うようにしてみました。
deopleteとは
deopleteはVimの(Dark poweredな)補完機能を強化してくれるプラグインです。
別途補完ソース用のプラグインを追加することで 補完候補を加えることも出来ます。
元々はNeovim専用でVimには neocompleteという同様のプラグインがありましたが、 deopleteの方がVim 8対応になったので 今後はバグフィックスだけで開発はしない、とのこと。
neocomplete development is over · Issue #600 · Shougo/neocomplete.vim
neocmpleteはLuaを使ったプラグインでしたが、 deopleteはPython 3を使っています。 (Neovimでは0.2以前ではLuaが使えず現状も徐々に対応している様な状態のため。)
その前に neocomplcache という外部言語を使わない?ものもありました。 (これはもうメンテナンスもされてません。)
deopleteの導入に必要なこと
ということでdeopleteはVimでも使える様になりましたが、 条件としてPython 3付きでコンパイルされている必要があります。
vim --version
で+python3
となってるか確認。
もしくはVim起動後:echo has('python3')
が1になることを確認。
そうでなければソースからビルドするなら
configure
に--enable-python3interp
を渡してビルド。
MacでHomebrewなら
brew install vim --with-python3
勿論Python 3がシステムにインストールされている必要があります。
加えてneovimというPython 3のパッケージがシステムに導入されてる必要があります。 ないとdepleteを起動する時に
Messages maintainer: Bram Moolenaar <[email protected]>
[vim-hug-neovim-rpc] failed executing: pythonx import neovim
[vim-hug-neovim-rpc] Vim(pythonx):Traceback (most recent call last):
[deoplete] [vim-hug-neovim-rpc] requires `:pythonx import neovim` command to work
[deoplete] function deoplete#enable[1]..deoplete#initialize[1]..deoplete#init#_initialize[11]..deoplete#init#_channel[10]..yarp#core#notify[1]..yarp#core#wai
t_channel[5]..yarp#core#jobstart[2]..yarp#pyx#init[13]..yarp#core#serveraddr[1]..neovim_rpc#serveraddr, line 15
みたいなエラーがおきます。
この場合にはpip3
で
$ pip3 install --upgrade neovim
の様にインストールしてあげる必要があります。(neovimパッケージが古い場合にもエラーが出るのでその場合にも同様のコマンドでバージョンアップグレードが必要。)
Neovimでは元々python3
が無効な状態でも
このneovimパッケージを入れると自動で有効になります(再コンパイルとか必要なし)。
Neovimでdeopleteを使う場合にはpython3
が有効であればOKですが、
Vimの場合にはさらに
roxma/nvim-yarp、
roxma/vim-hug-neovim-rpc
という2つのプラグインが必要になります。
また、VimではVim 8から導入されたtimers
という機能が入っている必要がありますが(python3
同様にvim --version
で確認)、
通常のビルドなら入っているはずです。
これが必要なのでVim 7とかでは使えません。
deopleteの導入
Python 3とかは入ってない環境があるので.vimrcではまだneocompleteも残す形で導入しました。
プラグインの導入は同じ作者のShougoさんの dein を使って
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
こんな感じで導入しています。
Neovimでの設定も含めてNeovim(nvim
)で無い場合はVimとして
timers
を要求しています。
python3
はいずれにしろ必要。
さらにはpip3
でneovimパッケージが入ってるかどうかをチェックしています。
これに関してはシステムによってはちょっと起動に時間がかかる可能性がありますが
入れてみてもそれ程体感が変わらなかったので入れてます。
これらがそろってる環境ではdeopleteを使います。
nvim
で無い場合(Vimの場合)には必要な2つのプラグインも追加。
python3とかがそろってない場合にlua
が使えればneocompleteを。
その昔はそうでもない場合にneocomplcacheを使う様にしてましたが 今はもうメンテもされてないのでそういった場合は何も使わないように。
2つとも初期状態ではVim起動時に有効になってないので
起動時に有効にするenable_at_startup
と言う値を1にしてあげます。
deopleteを使ってみて
neocompleteも特に不満は無いので deopleteにしても体感的にはあまり違いを感じませんが、 大きな違いは依存してる言語がLuaかPython 3か、という部分。
個人的にLuaというものを他では使いませんし、 Vimとしてもneocompleteだけで使っているので これだけのためにLuaをインストールし、Lua付きなVimをインストールする必要がありました。
一方、Python 3はまだデフォルトで入っていない環境も多いですが 直接使うこともありますし元々入っている環境も結構あります。
機能的な面ではありませんがこれは人によっては結構嬉しいことだと思います。 逆な人もいるかもしれませんが。
deoplete用補完ソースプラグイン
上にも書いた様に、Vimのオリジナル機能で補完出来るバッファ内にある文字列等に加え、 プラグインを追加することでプログラム言語の中で定義されてる 名前などが補完出来る様になります。
今は以下の様なものを入れています。 (実際には上の.vimrc例の中のdeopleteやneocompleteを追加する所に一緒に記述。)
1 2 3 |
|
neco-vimはVimスクリプトを書く時に補完をしてくれます。
neco-syntaxは各filetypeのsyntaxファイルの中にある記述を見て 補完候補を追加してくれます。
neco-lookはlook
コマンドを用いて入力した文字列から始まる英単語を表示してくれます。
コマンドラインからlook ab
とかやれば
$ look ab
Ab
aba
Ababdeh
Ababua
abac
abaca
...
となると思いますがこの内容を補完候補に。
look
コマンドが入ってないと使えませんがほとんどのUnixシステムには入ってます。
これらはdeopleteでもneocompleteでも使用可能です。
他にも色々な補完ソースを以下から見つけることが出来ます。
各言語のチェッカーなどを使ったもの(そのツールがインストールされてる必要がある) などもあって、特に使うものについては準備して入れると便利になるかと。
上で入れてるnecoシリーズは元々neocompleteの時代からあったもので
deopleteにも対応するようにアップデートが加えられてますが、
上記のページにあるdeoplete-
的なプラグインは基本的にはdeopleteでしか使えないものです。
neocomplete用の同様のものも探せば沢山あるので必要ならば探して。
この辺の補完ソースの違いも2つのプラグインの使い勝手を変えると思いますが、 今後はdeopleteの方のものが増えていくのでdeopleteの使い勝手が上がっていくでしょう。