Neovim導入　-思考の速さの編集を求めて-

# 概要
Neovimの設定方法、エラーとの戦いを主に記しています。
そして、ただ今奮闘中であります。

neovimに手を出した理由
* ~~atom重すぎ~~
* 書籍「実践Vim 思考のスピードで編集しよう!」のタイトルに惹かれ、
* まずはゴリゴリでモダンな環境を整えるところから始める

とりあえずURL貼っときます。
[実践Vim 思考のスピードで編集しよう! (amazon)](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Vim-%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86-Drew-Neil/dp/4048916599)


# 導入環境
2018/4/6　現在

* OS macOS Sierra 10.12.6
* neovim 0.2.2

現状

![スクリーンショット 2018-04-07 21.35.41.jpg](https://qiita-image-store.s3.amazonaws.com/0/227662/09aa1780-01dd-d679-f56b-c71c6a0b49e1.jpeg)


設定ファイルはこちら　[https://github.com/KenziTajima/neovim](https://github.com/KenziTajima/neovim)



#うまくいったこと

## dein.vimの導入
こちらは闇の力を宿したプラグインを管理するプラグインになりなす。
インストールにはGitHubのREADMEを参考に以下の手順をこなすだけです。
URL: [Shougo/dein.vim](https://github.com/Shougo/dein.vim)

手順を示します。

### 以下のコマンドをターミナルで実行する。

```sh

$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
$ sh ./installer.sh {specify the installation directory}
```

　注意: 2行目の "{}" もパス名に含める。（自分は一回引っかかった。）
###  installer.sh実行時に出てきた文字列を設定ファイル(init.vim)に追記する。
### tomlファイルでプラグインを管理するためにinit.vimでファイルを指定する。

```vim

" dein.toml, dein_layz.tomlファイルのディレクトリをセット
  let s:toml_dir = expand('~/.config/nvim')
" 起動時に読み込むプラグイン群
  call dein#load_toml(s:toml_dir . '/dein.toml', {'lazy': 0})
" 遅延読み込みしたいプラグイン群
  call dein#load_toml(s:toml_dir . '/dein_lazy.toml', {'lazy': 1})
```

&nbsp;&nbsp;参考　[dein.vimでプラグイン管理のはじめ方 (Qiita)](https://qiita.com/sugamondo/items/fcaf210ca86d65bcaca8)


## 見た目をモダンにする

導入したプラグイン

 * [テーマ　joshdick/onedark.vim](https://github.com/joshdick/onedark.vim)
 * [テーマ　mhartington/oceanic-next](https://github.com/mhartington/oceanic-next)
 * [status/tabline　vim-airline/vim-airline](https://github.com/vim-airline/vim-airline)
 * [statusline　powerline/powerline](https://github.com/vim-airline/vim-airline)
 
theme設定 (init.vimに記述)

```vim

colorscheme onedark
let g:airline_theme='oceanicnext'
```

以下設定

```vim

" パワーラインでかっこよく
"let g:airline_powerline_fonts = 1　設定すると文字化けを起こす。
" カラーテーマ指定してかっこよく
"let g:airline_theme = 'badwolf'
" タブバーをかっこよく
let g:airline#extensions#tabline#enabled = 1
" 選択行列の表示をカスタム(デフォルトだと長くて横幅を圧迫するので最小限に)
let g:airline_section_z = airline#section#create(['windowswap', '%3p%% ', 'linenr', ':%3v'])
" virtulenvを認識しているか確認用に、現在activateされているvirtualenvを表示(vim-virtualenvの拡張)
let g:airline#extensions#virtualenv#enabled = 1
" gitのHEADから変更した行の+-を非表示(vim-gitgutterの拡張)
let g:airline#extensions#hunks#enabled = 0
" Lintツールによるエラー、警告を表示(ALEの拡張)
let g:airline#extensions#ale#enabled = 1
let g:airline#extensions#ale#error_symbol = 'E:'
let g:airline#extensions#ale#warning_symbol = 'W:'
```

参考元は忘れました。<(_ _)>

## QuickRunを導入
vinないでコンパイル、実行を行えるようになります。
### tomlに記述してインストール。

```toml

[[plugins]]
repo = 'thinca/vim-quickrun'
```

python周りでエラーが出たから対処します。
参考　[Neovim の CheckHealth において Python 連携まわりで警告が出るときの対処
 (Qiita)](https://qiita.com/yuku_t/items/6db331e7084f88b43fe4#initvim-%E3%81%A7%E3%83%91%E3%82%B9%E3%82%92%E6%8C%87%E5%AE%9A)
それでもエラー

```
Failed to load python host. ...
```

と出たので

```
let g:python_host_prog=$PYENV_ROOT.'/versions/neovim-2/bin/python'
```

を

```
let g:python_host_prog=$PYENV_ROOT.'/versions/neovim-2/bin/python2.7'
```

に変更したところ解決。


### vimprocを用いた非同期処理

参考は同上　[vim-quickrun シンプルかつまともに使える設定 (Qiita)](https://qiita.com/uplus_e10/items/2a75fbe3d80063eb9c18)

まずはvimprocをインストール
(dein.toml)に以下のように記述する。

```toml

[[plugins]]
repo = 'Shougo/vimproc.vim'
build = 'make'
```

次にQuickRunの設定
以下のように(init.vim)に記述する。

```vim

let g:quickrun_config = get(g:, 'quickrun_config', {})
let g:quickrun_config._ = {
      \ 'runner'    : 'vimproc',
      \ 'runner/vimproc/updatetime' : 60,
      \ 'outputter' : 'error',
      \ 'outputter/error/success' : 'buffer',
      \ 'outputter/error/error'   : 'quickfix',
      \ 'outputter/buffer/split'  : ':rightbelow 8sp',
      \ 'outputter/buffer/close_on_empty' : 1,
      \ }
```

結果
以下のようなエラーが出る。

```
[vimproc] vimproc's DLL: "/Users/local/.cache/dein/repos/github.com/Shougo/vimproc.vim/lib/vimproc_mac.so" is not found.  Please read :help vimproc and make it.
Error detected while processing function quickrun#command[10]..quickrun#run[10]..303[10]..395:
line    1:
E117: Unknown function: vimproc#pgroup_open
E15: Invalid expression: vimproc#pgroup_open(join(a:commands, ' && '))
```

そこで、GitHub[Shougo/vimproc.vim](https://github.com/Shougo/vimproc.vim)をのぞいてみるとmakeコマンドを実行する必要がありそうなので、インストールしたディレクトリまで移動してコマンドを実行すると解決できました。

# まだうまくいっていないこと

##QuickRun関連

### \<C-c>で強制終了させる。

参考　[vim-quickrun シンプルかつまともに使える設定 (Qiita)](https://qiita.com/uplus_e10/items/2a75fbe3d80063eb9c18)

調べたら以下のようにinit.vimに記述したら好きなタイミングで終了できるらしい

```vim

nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"
```

しかし以下のように表示されるのみ

```vim

Type  :quit<Enter>  to exit Nvim
```

ショートカットキーを変更するとただ反応しなくなったし、他のコマンドを割り当てるとしっかり反応する。
原因不明です。

# まだ試していないこと

以下のプラグインはまだいじっていない

* deoplate
* denite
* neosnippet
* vim-fugitive
* vim-gitgutter


# その他

vimrcに記述した設定を移植しました。

```vim

" setting
"文字コードをUFT-8に設定
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" 編集中のファイルが変更されたら自動で読み直す
set autoread
" バッファが編集中でもその他のファイルを開けるように
set hidden
" 入力中のコマンドをステータスに表示する
set showcmd
" シンタックスハイライト
syntax enable
" Y を、行末までのヤンクにする
nnoremap Y y$
" displayオプション
set display=lastline
" 補完メニューの高さ
set pumheight=10
" 括弧を入力した時に、対応する括弧に一瞬カーソル飛ぶ
set showmatch
set matchtime=1
" インクリメント、デクリメントへのマッピング
nnoremap + <C-a>
nnoremap - <C-x>
" 不可視文字を表示
set clipboard+=unnamed
set clipboard=unnamed
" 括弧補完
inoremap { {}<LEFT>
inoremap ( ()<LEFT>
inoremap < <><LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
inoremap [ []<LEFT>





" 見た目系
" タイトルを表示
set title
" 行番号を表示
set number
" 現在の行を強調表示
set cursorline
" 現在の行を強調表示（縦）
"set cursorcolumn
" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore
" インデントはスマートインデント
set smartindent
" ビープ音を可視化
set visualbell
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" コマンドラインの補完
set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk


" Tab系
" 不可視文字を可視化(タブが「▸-」と表示される)
set list listchars=tab:\▸\-
" Tab文字を半角スペースにする
set expandtab
" 行頭以外のTab文字の表示幅（スペースいくつ分）
set tabstop=4
" 行頭でのTab文字の表示幅
set shiftwidth=4


" 検索系
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索時に最後まで行ったら最初に戻る
set wrapscan
" 検索語をハイライト表示
set hlsearch
" ESC連打でハイライト解除
nmap <Esc><Esc> :nohlsearch<CR><Esc>
```