Neovim構築メモ

# Neovim導入メモ

VimからNeovimに移行完了したので、自分用のNeovim環境構築の備忘録です。
とりあえず設定のベース作りとdeinでプラグイン管理できるところあたりまで。
全体的に設定を省略していますが、気になる方がいましたらこちらのリポジトリを参考にしてください。
https://github.com/choco-kei/dotfiles/tree/neovim/config/nvim


## Neovimをインストール
Mac環境なのでHomebrewを使ってインストール。

```shell
$ brew install neovim
```

Mac以外の方はこちらを参照。
https://github.com/neovim/neovim/wiki/Installing-Neovim

## インストール後のチェック
Neovimを起動

```shell
$ nvim
```

Neovim上で`:checkhealth`を実行
エラーが出ている場合はメッセージを読んで対応。

## 設定ファイル作成
Vimと違い~/.config/以下に設定ファイルが置かれるので必要なものを一通り用意。

```shell
$ cd ~/
$ mkdir .config
$ mkdir .config/nvim
$ mkdir .config/nvim/plugins
$ touch .config/nvim/init.vim
$ touch .config/nvim/options.rc.vim
$ touch .config/nvim/keymap.rc.vim
$ touch .config/nvim/dein.toml
$ touch .config/nvim/deinft.toml
$ touch .config/nvim/deinlazy.toml
```

```shell
$ tree .config/nvim/
~/.config/nvim/
├── dein.toml
├── deinft.toml
├── deinlazy.toml
├── functions.rc.vim
├── init.vim
├── keymap.rc.vim
├── options.rc.vim
├── options.rc.vim
└── plugins/
```

### init.vim
Neovim設定本体、とりあえず基本的な設定とdeinとTrueColorの設定。
あとは分割した設定の読み込みなど。

```vimscript:init.vim
if &compatible
  set nocompatible
endif

augroup MyAutoCmd
  autocmd!
augroup END

" True Color対応
if has('nvim')
  " For Neovim 0.1.3 and 0.1.4
  let $NVIM_TUI_ENABLE_TRUE_COLOR=1

  " Or if you have Neovim >= 0.1.5
  if (has("termguicolors"))
    set termguicolors
  endif
elseif has('patch-7.4.1778')
  set guicolors
endif

let s:dein_cache_path = expand('~/.cache/nvim/dein')
let s:dein_dir = s:dein_cache_path
      \ .'/repos/github.com/Shougo/dein.vim'

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

if dein#load_state(s:dein_cache_path)
  call dein#begin(s:dein_cache_path)

  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy' : 0})
  call dein#load_toml('~/.config/nvim/deinlazy.toml', {'lazy' : 1})
  call dein#load_toml('~/.config/nvim/deinft.toml')

  call dein#end()
  call dein#save_state()
endif

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

filetype plugin indent on
syntax enable

runtime! ./options.rc.vim
runtime! ./keymap.rc.vim
runtime! ./functions.rc.vim
```

### options.rc.vim
Neovimのオプション`set hoge`系はこちらに記述。

```vimscript:options.rc.vim
" 編集中でもファイルを開けるように
set hidden

" 他で編集したファイルを自動で再読み込み
set autoread

" スクロール時の余白行数
set scrolloff=5
set sidescrolloff=6

" バックアップを作成しない
set nobackup

" 長くなるので省略。。。
```

### keymap.rc.vim
キーマップ設定はこちらに記述。

```vimscript:keymap.rc.vim
" Ctrl + hjkl でウィンドウ間を移動
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" Shift + 矢印でウィンドウサイズを変更
nnoremap <S-Left>  <C-w><
nnoremap <S-Right> <C-w>>
nnoremap <S-Up>    <C-w>-
nnoremap <S-Down>  <C-w>+

" 長くなるので省略。。。
```

### functions.rc.vim
独自コマンド等はこちらに記述。

```vimscript:functions.rc.vim
" jsonを整形
command! JsonFormat :execute '%!python -m json.tool'
      \ | :execute '%!python -c "import re,sys;chr=__builtins__.__dict__.get(\"unichr\", chr);sys.stdout.write(re.sub(r\"\\\\u[0-9a-f]{4}\", lambda x: chr(int(\"0x\" + x.group(0)[2:], 16)).encode(\"utf-8\"), sys.stdin.read()))"'
      \ | :set ft=json
      \ | :1

" 長くなるので省略。。。
```

### dein.toml
読み込むプラグインの設定。
プラグイン毎の設定は~/.config/nvim/plugins/以下に。
細かい記述方法とかはdeinのマニュアル参照。

```toml:dein.toml
[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]]
repo = 'cocopon/iceberg.vim'
hook_add = '''
source ~/.config/nvim/plugins/color_iceberg.rc.vim
'''

# 長くなるので省略。。。
```

### deinlazy.toml
遅延ロードするプラグインの設定。

```toml:dein.toml
[[plugins]]
repo = 'Shougo/context_filetype.vim'

[[plugins]]
repo = 'Shougo/deoplete.nvim'
depends = 'context_filetype.vim'
if = "has('nvim')"
on_i = 1
hook_source = '''
source ~/.config/nvim/plugins/deoplete.rc.vim
'''
[[plugins]]
repo = 'Shougo/neco-vim'

[[plugins]]
repo = 'Shougo/neoinclude.vim'
on_if = 1

# 長くなるので省略。。。
```

### deinft.toml
ファイルタイプ毎の設定。

```toml:deinft.toml
[ftplugin]
_ = '''
'''

vim = '''
setlocal shiftwidth=2 softtabstop=2
setlocal iskeyword+=:,#
'''

# 長くなるので省略。。。
```

## Neovimを起動してdeinとプラグインをインストール
Neovimを起動すれば自動的にdeinとプラグインのインストールまで行ってくれます。