neovimをインストールしてプラグイン管理をdein.tomlでやってみた

neovimの説明などは他の投稿や[neovim](https://github.com/neovim/neovim)を御覧ください。

## 概要
* コピペしていくとneovimの環境が整う
* neovimから採用されたtomlファイルによるプラグイン管理を試してみる


## 自身の環境
OS: OS X Yosemite 10.10.5
Shell: Zsh


## インストール
インストールについては[NeoVim と dein.vim を使ってみる!](http://qiita.com/Ress/items/7e71e007cf8d41a07a1a)を参考にしました。
まずはneovimのインストール

```
$ brew install neovim/neovim/neovim
```
インストール後には nvim というコマンドが使えるようになります。
deopleteという補完のプラグインにはpython3が必要ですのでpython3が入ってない方は入れましょう。pipを用いてneovimをインストールします。

```
$ brew install python3
$ pip3 install neovim
```
deopleteとは "dark powered neo-completion"の省略らしいです。か、かっこいいですね。
続いて

```
$ nvim
```
のようにとりあえずneovimを開いてみてノーマルモード状態で`:echo has("python3")`と打ってみます。`1`という結果が表示されるとOKです。

## 設定
シェルによりますが私はzshを使用しているので`.zshrc`にXDG_COONFIG_HOMEを設定します。

```zsh:~/.zshrc
export XDG_CONFIG_HOME=~/.config
```

次にviでいうところの`.vimrc`を設定します。
neovimでは`$XDG_CONFIG_HOME/nvim`配下に`init.vim`という名前で設定ファイルを記述するのが良いそうです。
参考: [NeoVimの.nvimrcの場所が変更された](http://qiita.com/mopp/items/963dcd237ed7d767d35f)

後で必要になるプラグインを管理するファイルを事前に作っておきましょう。

```
$ touch $XDG_CONFIG_HOME/nvim/dein.toml
$ touch $XDG_CONFIG_HOME/nvim/dein_lazy.toml
```
### init.vim
現時点での私のinit.vimを貼っておきます。大部分を[NeoBundle から dein.vim に乗り換えたら爆速だった話](http://qiita.com/delphinus35/items/00ff2c0ba972c6e41542)から引用いたしました。

```vim:~/.config/nvim/init.vim
" 行数
set number

set noswapfile


" insertモードから抜ける
inoremap <silent> jj <ESC>
inoremap <silent> <C-j> j
inoremap <silent> kk <ESC>
inoremap <silent> <C-k> k

filetype indent on
set tabstop=2
set shiftwidth=2
set expandtab

" プラグインがインストールされるディレクトリ
let s:dein_dir = expand('~/.cache/dein')
" dein.vim 本体
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'

" dein.vim がなければ github から落としてくる
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

" 設定開始
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)
  
  " プラグインリストを収めた TOML ファイル
  " 予め TOML ファイルを用意しておく
  let g:rc_dir    = expand("~/.config/nvim/")
  let s:toml      = g:rc_dir . '/dein.toml'
  let s:lazy_toml = g:rc_dir . '/dein_lazy.toml'

  " TOML を読み込み、キャッシュしておく
  call dein#load_toml(s:toml,      {'lazy': 0})
  call dein#load_toml(s:lazy_toml, {'lazy': 1})
  
  " 設定終了
  call dein#end()
  call dein#save_state()
endif

" もし、未インストールものものがあったらインストール
if dein#check_install()
  call dein#install()
endif

```

vimではNeoBundleを使用してしましたが、neovimでは`dein.vim`を使用することにしました。上記の`init.vim`をコピペすると問題なく`dein.vim`を取ってくるようになっています。
`init.vim`では`.vimrc`と同様の書き方で `jj` でインサートモードを抜けるですとか, tabのサイズを指定するといったことが可能です。

### dein.toml
さきほどの`init.vim`内にプラグインの情報は`dein.toml`から読み取るといったことが書かれています。
別ファイルでプラグインを管理できるので`init.vim`がすっきりして良いですね。
deopleteを導入するための`dein.toml`を以下に記載します。

```toml:~/.config/nvim/dein.toml
[[plugins]]
repo = 'Shougo/deoplete.nvim'
hook_add = 'let g:deoplete#enable_at_startup = 1'
``` 
hookの使い方は[[dein.vim] hook の便利な使い方](http://qiita.com/delphinus35/items/cd221a450fd23506e81a)
を参考にしました。
基本的には *repo = レポジトリ名* と hookを組み合わせるとほとんどのプラグインの設定が書けるはずです（たぶん）。
上記の投稿を参考にして作ったものですが、現状での自身のdein.tomlを貼っておきます。

```yaml:~/.config/nvim/dein.toml
[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]]
repo = 'Shougo/vimproc.vim'
hook_post_update = '''
  if dein#util#_is_windows()
    let cmd = 'tools\\update-dll-mingw'
  elseif dein#util#_is_cygwin()
    let cmd = 'make -f make_cygwin.mak'
  elseif executable('gmake')
    let cmd = 'gmake'
  else
    let cmd = 'make'
  endif
  let g:dein#plugin.build = cmd
'''

[[plugins]]
repo = 'thinca/vim-quickrun'
hook_post_update = '''
  let g:quickrun_config = {'*': {'hook/time/enable': '1'},}
'''

[[plugins]]
repo = 'Shougo/deoplete.nvim'
hook_add = 'let g:deoplete#enable_at_startup = 1'

[[plugins]]
repo = 'cespare/vim-toml'

```

これで設定は以上です。
問題なく設定が終わっていれば、[deopleteのリボジトリ](https://github.com/Shougo/deoplete.nvim)のREADMEにあるような補完ができるはずです。