vimからneovimへの移行

vimからneovimへの移行をしてみた。作業メモ。

インストール

$ brew install neovim/neovim/neovim

.zshrc に以下を追加

export XDG_CONFIG_HOME=$HOME/.config

既存のvimの設定からシムリンクを貼る

$ ln -snfv ${HOME}/.vim ${HOME}/.config/nvim
/Users/m-morita/.config/nvim -> /Users/m-morita/.vim
$ ln -snfv ${HOME}/.vimrc ${HOME}/.config/nvim/init.vim
/Users/m-morita/.config/nvim/init.vim -> /Users/m-morita/.vimrc

起動してみる。なんかエラー出た。

$ nvim
/Users/m-morita/.vim/init.vim の処理中にエラーが検出されました:
行  317:
E518: 未知のオプションです: ttymouse=sgr
You need vim compiled with Python 2.6, 2.7 or 3.2 and later support
for Powerline to work. Please consult the documentation for more
details.
続けるにはENTERを押すかコマンドを入力してください

どうやらneovimではデフォルトでマウスをサポートしてるのでttymouseオプションなくしたっぽい
https://neovim.io/doc/user/nvim.html

.vimrc を以下のように修正

if !has('nvim')
  " neovimではデフォルトでマウスサポートしているので不要
  set ttymouse=sgr
endif

あとPythonサポートがないと言ってる。

もともとPowerlineとか入れてた手元のPythonは2系だったんだけど、あとでneocompleteをdeopleteについでに変えようと思ってたのでPython3系を入れておく。

$ brew install python3
$ python3 --version
Python 3.6.1
$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

で、pip3でneovimを入れる

$ pip3 install neovim
$ nvim
Traceback (most recent call last):
  File "<string>", line 4, in <module>
ModuleNotFoundError: No module named 'powerline'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<string>", line 9, in <module>
  File "/Users/m-morita/.vim/bundle/powerline/powerline/vim.py", line 15, in <module>
    from powerline.bindings.vim import vim_get_func, vim_getvar, get_vim_encoding, python_to_vim
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 44, in <module>
    vim_encoding = get_vim_encoding()
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 25, in get_vim_encoding
    return vim.options['encoding'].decode('ascii') or 'ascii'
AttributeError: 'str' object has no attribute 'decode'
An error occurred while importing powerline module.
This could be caused by invalid sys.path setting,
or by an incompatible Python version (powerline requires
Python 2.6, 2.7 or 3.2 and later to work). Please consult
the troubleshooting section in the documentation for
possible solutions.
function provider#python3#Call の処理中にエラーが検出されました:
行   18:
Traceback (most recent call last):
  File "<string>", line 53, in <module>
  File "<string>", line 40, in powerline_troubleshoot
  File "/Users/m-morita/.vim/bundle/powerline/powerline/lint/__init__.py", line 12, in <module>
    from powerline.segments.vim import vim_modes
  File "/Users/m-morita/.vim/bundle/powerline/powerline/segments/vim/__init__.py", line 16, in <module>
    from powerline.bindings.vim import (vim_get_func, getbufvar, vim_getbufoption,
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 44, in <module>
    vim_encoding = get_vim_encoding()
  File "/Users/m-morita/.vim/bundle/powerline/powerline/bindings/vim/__init__.py", line 25, in get_vim_encoding
    return vim.options['encoding'].decode('ascii') or 'ascii'
AttributeError: 'str' object has no attribute 'decode'
続けるにはENTERを押すかコマンドを入力してください

なんかpowerlineがエラーになるなぁ。

このエラー自体は単にモジュールが読み込まれていないだけっぽいけど、powerlineのissue眺めてたらそもそも現時点ではpowerlineはneovimに正式には対応してないっぽい(?)
https://github.com/powerline/powerline/issues/1287

上のissueでpowerlineじゃなくてairline使えって言われてる。
https://github.com/vim-airline/vim-airline

とりあえず無効化して先に進もう

" PowerLine
if !has('nvim')
  NeoBundle 'alpaca-tc/alpaca_powertabline'
  NeoBundle 'Lokaltog/powerline', { 'rtp' : 'powerline/bindings/vim'}
  NeoBundle 'Lokaltog/powerline-fontpatcher'
  let g:Powerline_symbols = 'fancy'
  set laststatus=2
endif

稼働確認してみる。

neocompleteが動いてなさそう。これはあとでdeopleteに置き換える予定なのでいいや。

deopleteの導入
.vimrc に以下を追加

if has('nvim')
  NeoBundle 'Shougo/deoplete.nvim'
  let g:deoplete#enable_at_startup = 1
endif

nvimを起動

$ nvim

:NeoBundleRemotePlugins を実行。

:NeoBundleRemotePlugins

nvimを再起動すればOK。

補完は速くなった気がする。快適。

airlineの導入

.vimrc に以下を追記

if has('nvim')
  NeoBundle 'vim-airline/vim-airline'
  NeoBundle 'vim-airline/vim-airline-themes'
  let g:airline#extensions#tabline#enabled = 1
  let g:airline_theme = 'distinguished'
  let g:airline_powerline_fonts = 1
  set laststatus=2
endif

テーマはどれにするか悩んだけど、distinguishedにするとNormalモードでバッファに未保存の状態でステータスバーの色が変わるので、わかりやすくてよさげなのでこれにしてみた。