vimからneovimに移行したのでそのときにしたこと

TL;DR

vimを使ってきましたがneovimのほうが良いと言われたのでこれを機にneovimに移行しました.
neovimは~/.config/nvim/init.vimの設定が読み込まれるらしいので,肥大化しすぎていたvimrcをplugin管理用の.tomlと基本的な設定を記した.vimに分割して,init.vimではそれを読み込むだけのようにした.

また,dotfilesの構成もわかりやすいように改装してみました.

構成

以下のような感じにしてみた.

~/.dotfiles/vim
├─ init.vim  # 各設定ファイルを読み込む.~/.config/nvim/init.vimにシンボリックリンクを貼る
├─ basic.vim  # 基本的な設定
├─ dein.vim   # dein.vimを使うための処理を記載
├─ appearance.vim # 見た目の設定
├─ keymaps.vim  # キーマップの設定
├─ plugins  # dein.vimでインストールされるプラグイン先
│       ├─ ...
│       └─ ...
├─ toml  # tomlファイル
│       ├─ general.toml  # dein.vimなど
│       ├─ colorscheme.toml  # colorschemeなど
│       ├─ nerdtree.toml  # NERDTree
│       ├─ lightline.toml  # lightline
│       ├─ neovim.toml  # deoplete.nvimとかそのあたり
│       └─ completion.toml  # deoplete-clangなど
└─ scripts  # 自分で作ったスクリプトなど

.tomlの設定

dein.vimdeoplete.nvimなどのプラグインはtomlファイルに記述するようにした.

[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]]
repo = 'simeji/winresizer'
hook_add = '''
    let g:winrisizer_vert_resize=1
    let g:winresizer_horiz_resize=1
'''
          .
          .
          .
  1. 基本的には関連するプラグインを1つのファイルにまとめる
  2. 設定が大量にしてあるプラグインは個別にtomlを作る

注意しないといけないことはpluginspluginと間違えないこと.
pluginと間違えてしまうと設定ファイル自体は読み込めてもプラグインが使えない状態に陥ってしまう.

.vimの設定

init.vimは以下のように.vimを呼び出すだけにした.

let s:base_dir = expand('~/.dotfiles/vim')

" runtimepathに追加
execute 'set runtimepath+=' . fnamemodify(s:base_dir, ':p')

runtime! basic.vim
runtime! keymaps.vim
runtime! dein.vim
runtime! appearance.vim

dein.vimにはプラグインのdein.vimの設定で必要な処理が書いてある.

set nocompatible

set encoding=utf-8
scriptencoding utf-8

filetype plugin indent off
syntax off

" Required:
let g:python_host_prog  = $PYENV_ROOT . '/versions/neovim2/bin/python'
let g:python3_host_prog = $PYENV_ROOT . '/versions/neovim3/bin/python'

let s:base_dir = expand('~/.dotfiles/vim')
let s:dein_dir = s:base_dir . '/plugins'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
let s:toml_dir = s:base_dir . '/toml'

if &runtimepath !~# '/dein.vim'
    if !isdirectory(s:dein_repo_dir)
        execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
    endif
    execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p')
endif

" Required:
if dein#load_state(s:dein_dir)
    call dein#begin(s:dein_dir)

    call dein#load_toml(s:toml_dir . '/general.toml',     {'lazy':0})
    call dein#load_toml(s:toml_dir . '/colorscheme.toml', {'lazy':0})
    call dein#load_toml(s:toml_dir . '/nerdtree.toml',    {'lazy':0})
    call dein#load_toml(s:toml_dir . '/lightline.toml',   {'lazy':0})
    call dein#load_toml(s:toml_dir . '/neovim.toml',      {'lazy':0})
    call dein#load_toml(s:toml_dir . '/completion.toml',  {'lazy':0})
    if !has('nvim')
        call dein#add('roxma/nvim-yarp')
        call dein#add('roxma/vim-hug-neovim-rpc')
    endif
    call dein#end()
    call dein#save_state()
endif

" If there are the plugins that has not been installed on startup,
" dein is checking and installing.

if dein#check_install()
    call dein#install()
endif

" Required:
filetype plugin indent on

syntax on

もしもpythonpyenv + virtualenvで環境の管理していた場合,以下のようにしてneovimのクライアントをインストールする.

$ pyenv install 2.7.15
$ pyenv virtualenv 2.7.15 neovim2
# 自分の場合デフォルトで3.7.1がインストールされているのでpython3.7.1の環境を作ることが出来る
$ pyenv virtualenv neovim3
# python3.7の環境が欲しい場合は
# $ pyenv install 3.7.0
# $ pyenv virtualenv 3.7.0 neovim3

# それぞれの環境にactivateしてneovimをインストール
$ pyenv activate neovim2
$ pip install neovim

$ pyenv activate neovim3
$ pip install neovim3

# !!それぞれの環境に応じたpythonのパスを調べる
$ pyenv which python
# ex) /home/hoge/.pyenv/versions/neovim2/bin/python
#     /home/hoge/.pyenv/versions/neovim3/bin/python

インストールが終了したらdein.vimpythonのパスを適切に設定する.

let g:python_host_prog  = $PYENV_ROOT . '/versions/neovim2/bin/python'
let g:python3_host_prog = $PYENV_ROOT . '/versions/neovim3/bin/python'

こうしないと:checkhealthで診断したときにpythonのproviderのところでErrorが出る.(deopleteとか使えなくなる?)

あとはシンボリックリンクを作ってやればneovimの設定が反映される.

$ ln -s ${HOME}/.dotfiles/vim/init.vim ${HOME}/.config/nvim/init.vim