私が使う Vim プラグインまとめ

## はじめに

Neovim の設定を一年以上サボっていたので、久しぶりに整理しました。
入れているのに全く使っていなかったプラグインや、上手く活用できていなかったプラグインがあることに気づき、改めてプラグインの使い方をおさらいしてみました。

※ 前回書いた記事の続きとなっておりますので、そちらもご覧ください。
=> [Neovim の設定を綺麗に整理してみた](https://qiita.com/tamago3keran/items/cdfd66b627b3686846d2)

## やったこと

- Vim プラグインの使用方法の調査
- キーマッピング

## 環境

- **macOS Sierra**: v10.12.6
- **Neovim**: v0.3.0
- **Python2**: v2.7.10
- **Python3**: v3.7.0
- **Ruby**: v2.4.4p296
- **Node.js**: v10.6.0

## プラグイン紹介

### [tpope/vim-endwise](https://github.com/tpope/vim-endwise)

do ブロック や def、 if 文などを作成するときに end を自動で入力してくれるプラグインです。

#### デモンストレーション

![vim-endwise.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/e8d67d6b-9acd-3248-776e-939d3f587d26.gif)

### [Townk/vim-autoclose](https://github.com/Townk/vim-autoclose)

括弧の自動で補完してくれるプラグインです。
" を打つと "" に自動補完してくれますし、 ( を打つと () に自走補完してくれます。

#### デモンストレーション

![vim-autoclose.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/19d36aa2-373f-d263-34bd-143d6b8df330.gif)

### [joshdick/onedark.vim](https://github.com/joshdick/onedark.vim)

#### 説明

Atom の One Dark というカラースキームにインスパイアされて作られた Vim / Neovim のカラースキームです。
目に優しい感じが好きで愛用しています。

### [w0rp/ale](https://github.com/w0rp/ale)

#### 説明

非同期で syntax チェックを行うプラグインです。
Neovim や Vim8 で非同期な操作が可能になったことで、このプラグインがよく使われるようになったそうです。

### [airblade/vim-gitgutter](https://github.com/airblade/vim-gitgutter)

#### 説明

Gitで管理しているファイルを編集する際に、差分を表現する記号を左端に表示してくれるプラグインです。
~が変更があった行、+が追加行、-が削除された行であることを示しています。

それだけではなく、差分がある行にすぐに移動できたり、差分を元に戻すこともできます。

#### デモンストレーション

![vim-gitgutter.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/bbdf37a0-0363-fd7c-2413-3472e1d6d10a.gif)

#### 設定ファイル

```vim:~/.config/nvim/plugins/gitgutter.vim
set signcolumn=yes
set updatetime=1000

nnoremap [gitgutter] <Nop>
nmap <C-h> [gitgutter]
nmap [gitgutter]j <Plug>GitGutterNextHunk
nmap [gitgutter]k <Plug>GitGutterPrevHunk
nmap [gitgutter]u <Plug>GitGutterUndoHunk
```

### [tpope/vim-fugitive](https://github.com/tpope/vim-fugitive)

#### 説明

vim から git を呼べるようにするラッパープラグインです。
fugitive を使うと git を操作するためにいちいち vim から抜けなくてよくなります。

中でも私は Gblame を愛用しています。
Gblame で開いたウィンドウ内で O を打つと、コミットの内容まで表示してくれます。

#### デモンストレーション

![git-fugitive.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/b3cbd8a4-db89-165a-c4a2-b6d065c0f22f.gif)

#### 設定ファイル

```vim:~/.config/nvim/plugins/fugitive.vim
command Gst :Gstatus
command Gdf :Gdiff
command Gbl :Gblame
```

### [Shougo/denite.nvim](https://github.com/Shougo/denite.nvim)

#### 説明

vim 用の統合ユーザインターフェースを実現してくれるプラグインです。
様々なデータを同じインタフェースで操作することができるようになります。

例えば、ファイルをファイル名で絞り込んで検索できたり、文字を grep して検索することもできます。また検索したファイルを同じインターフェースで開いたりすることもできます。

#### デモンストレーション

![denite.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/5fcb9f6c-4910-7b24-17c7-d3311b81c310.gif)

#### 設定ファイル

```vim:~/.config/nvim/plugins/denite.vim
nnoremap [denite] <Nop>
nmap <C-d> [denite]
nnoremap <silent> [denite]g :<C-u>Denite grep -buffer-name=search-buffer-denite<CR>
nnoremap <silent> [denite]r :<C-u>Denite -resume -buffer-name=search-buffer-denite<CR>
nnoremap <silent> [denite]p :<C-u>Denite file_rec<CR>

call denite#custom#option('default', 'prompt', '>')
call denite#custom#option('_', 'highlight_matched_range', 'None')
call denite#custom#option('_', 'highlight_matched_char', 'None')

call denite#custom#map('insert', "<Tab>", '<denite:move_to_next_line>')
call denite#custom#map('insert', "<S-Tab>", '<denite:move_to_previous_line>')
call denite#custom#map('insert', "<C-t>", '<denite:do_action:tabopen>')
call denite#custom#map('insert', "<C-v>", '<denite:do_action:vsplit>')
call denite#custom#map('normal', "v", '<denite:do_action:vsplit>')

call denite#custom#var('grep', 'command', ['pt', '--follow', '--nogroup', '--nocolor', '--hidden'])
call denite#custom#var('grep', 'default_opts', [])
call denite#custom#var('grep', 'recursive_opts', [])
call denite#custom#var('file_rec', 'command', ['pt', '--follow', '--nocolor', '--nogroup', '--hidden', '-g', ''])
```

#### 補足

私は高速 grep ツールとして [the_platinum_searcher](https://github.com/ggreer/the_silver_searcher) を採用しています。
理由は [the_silver_searcher](https://github.com/ggreer/the_silver_searcher) や [highway](https://github.com/tkengo/highway) よりも速いという記事をよく見かけるからです。

### [osyo-manga/vim-anzu](https://github.com/osyo-manga/vim-anzu)

#### 説明

検索時にマッチした個数とそれが何番目であるかの情報を表示してくれるプラグインです。
今までマッチした個数や何番目であるかが分からず、 n を押しっぱなしで迷子になっていたので、非常に助かってます。

#### デモンストレーション

![anzu.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/5040790e-5182-34e3-ce05-59518ce8a9ff.gif)

#### 設定ファイル

```vim:~/.config/nvim/plugins/anzu.vim
nmap n <Plug>(anzu-n-with-echo)
nmap N <Plug>(anzu-N-with-echo)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)
```

### [Shougo/deoplete.nvim](https://github.com/Shougo/deoplete.nvim)

#### 説明

deoplete は拡張可能で非同期の補完フレームワークを提供してくれる Vim プラグインです。
別途補完ソース用のプラグインを追加することで、補完機能を強化することもできます。

#### デモンストレーション

![deoplete.gif](https://qiita-image-store.s3.amazonaws.com/0/186009/aa422c1d-992a-05a7-dba4-4bc26bb03936.gif)

#### 設定ファイル

```vim:~/.config/nvim/plugins/deoplete.vim
let g:deoplete#enable_at_startup = 1
inoremap <expr><Tab> pumvisible() ? "\<DOWN>" : "\<Tab>"
inoremap <expr><S-Tab> pumvisible() ? "\<UP>" : "\<S-Tab>"
```