僕のneovim設定(init.vim)を晒す

neovim設定は[僕のリポジトリ](https://github.com/mah-shee/nvim-config)で公開しているのでコード全体だけ見たいという方は直接御覧ください。

なにか変な所があればこちらが教えてほしいくらいですが、とりあえず晒しながらどんな設定をしているか紹介します。
PythonとJavaScript, JSX(react.js)を書くための設定が充実させています。
しかし今回は気力の問題でinit.vimだけ解説します。linterや補完などの設定の解説は後々気が向けばやります。

僕の環境に合うように所々調整しているところがあるのでリポジトリをクローンすれば即使えるというわけにはいきませんが、そこを直せばそのまま使えると思います。

## 環境
```
macOS v10.13.6
NVIM v0.3.4
Python 3.7.2
pyenv 1.2.11
ruby 2.5.1
rbenv 1.1.1
node v11.4.0
nodebrew 1.0.1
```
python, ruby, nodeそれぞれバージョン管理ツールを使っているので一応載せておきます。
特にpyenvはneovim自体やプラグインを実行するために必要なPythonの環境を指定するために設定ファイルを変えているので僕の設定どおりに使う場合はインストール必須です。
多分「[pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法](https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b)」を見れば割と簡単にインストールできるはず。

## ファイル構成
それぞれのファイルの中身は後で紹介しますが、とりあえずファイル構造を載せます。    

```
.
├── dein.toml
├── dein_lazy.toml
├── init.vim
├── keymap.rc.vim
├── options.rc.vim
└── plugins
    ├── airline.vim
    ├── ale.vim
    ├── anzu.vim
    ├── denite.vim
    ├── deoplete.vim
    ├── fugitive.vim
    ├── gitgutter.vim
    └── quickrun.vim
```

dein.tomlとdein_lazy.tomlにはプラグインの設定を書いています。  
plugins/以下のファイルはプラグインごとの設定を直接tomlファイルに書くと見づらくなってしまうので外部ファイルに切り分けました。  

init.vimは言わずもがなneovimの設定ファイル。
このファイルから他のファイルたちを全部読み込んでいる感じ。

keymap.rc.vimにはタブスペースなどインデント設定やちょっと便利にするためのキーマップ設定を記述。  
options.rc.vimにはなんとなくコマンドの置き換えやカラースキーム用の細かい設定を記述。  
現状分けている意味は特にありませんが、今後設定が増えるかもと思って一応分けています。  

## 設定紹介
```vim:init.vim
if &compatible
  set nocompatible
endif
"おまじない

let g:python_host_prog = system("echo -n (pyenv root)/versions/(pyenv global | grep '^2')/bin/python")
let g:python3_host_prog = system("echo -n (pyenv root)/versions/(pyenv global | grep '^3')/bin/python")
"neovimを実行するためのPython実体を指定しています

set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim
"プラグインを管理するマネージャであるdeinのruntimepathを記述
if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')
  call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim')
  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})
  call dein#end()
  call dein#save_state()
endif
if dein#check_install()
  call dein#install()
endif
"deinを使ってtomlファイルに書いたプラグインたちをロードしています

filetype plugin indent on
"ファイルタイプの検索とプラグインをオンにする
syntax enable
"構文ハイライトを有効にする

runtime! options.rc.vim
runtime! keymap.rc.vim
"ここで２つの外部設定ファイルを読み込んでいます。プラグインに関係する設定もあるのでプラグインが読み込まれたあとに読み込み
```

set nocompatibleについては以下のような記事もあるのですが、vim用の記事でneovimについてこれに関連する記事が探してもなかったのでとりあえず書いています。  完全におまじないです。
「[set nocompatibleはもういらない](https://qiita.com/yu_suke1994/items/e0a19574994a57c8fe17)」  

```
let g:python_host_prog = system("echo -n (pyenv root)/versions/(pyenv global | grep '^2')/bin/python")
let g:python3_host_prog = system("echo -n (pyenv root)/versions/(pyenv global | grep '^3')/bin/python")
```
ここではvimscriptのsystem関数を用いて、pyenvのglobalに指定してあるpythonの実体パスの場所を指定しています。　　
[NeoVim用のPython環境を整える](https://qiita.com/sigwyg/items/41630f8754c2028a7a9f)

linterを毎回仮想環境に入れるのがめんどくさいのでpyenv globaに設定したpythonをneovim用として使っています  
多分もっといい方法があるけどこれで満足してる  

deinのインストール方法は[Neovim の設定を綺麗に整理してみた](https://qiita.com/tamago3keran/items/cdfd66b627b3686846d2)を参考にしました。 
 
```
$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
$ sh ./installer.sh ~/.cache/dein
```

これでいけるはずです。  

あとは気が向いたら各種プラグイン設定も紹介します。