【vimめも】 13. プラグイン

## プラグイン

vimを更に便利にするために、様々な機能が開発されてgitで公開されている

vimスクリプトだけでなく、様々な言語で書くことができるらしい（詳しくは知らない）

## プラグイン管理

10以上のプラグインを使用するようになると、すべてを自分でcloneしてupdateして・・・
など大変

そんな管理を楽にするためのプラグインも、もちろんあります

種類や人気度は@b4b4r07さんのこちらの記事を。

- [おい、NeoBundle もいいけど vim-plug 使えよ]
(https://qiita.com/b4b4r07/items/fa9c8cceb321edea5da0)

## 導入（dein）

ここでは私が使用しているdeinの使い方を載せます

余談：vim-plugの導入でわかりやすくい記事は[こちら](https://qiita.com/mijime/items/f4b337ab41db751388f7)
↑乗り換えようとしたけどvim-plugが合わなかったのでやめた

それ以外のものを使いたい際は自分で調べてください

### 流れ
**1**. deinを用意（git clone)
**2**. deinが読み込まれるようにruntimepathを通す
**3**. deinの書き方で、入れたいpluginを書いていく
**4**. `call dein#install()`にてプラグインをインストール


### 1、2

手作業の場合は、任意のディレクトリにcloneしてruntimepathを通す

```vim
set runtimepath+=#{cloneしたディレクトリ}
```

もしくは、ここもvimrcを読み込んだ際に自動で行われるようにしましょう

```vim
if has('nvim')
  let s:dein_cache_path = expand('~/.vim/cache/nvim/dein')
else
  let s:dein_cache_path = expand('~/.vim/cache/vim/dein')
endif

" dein本体を準備
if &runtimepath !~ '/dein.vim'
  let s:repos_path = s:dein_cache_path . '/repos/github.com/Shougo/dein.vim'
  if !isdirectory(s:repos_path)
    execute '!git clone https://github.com/Shougo/dein.vim.git ' . s:repos_path
  endif
  execute 'set runtimepath+=' . s:repos_path
endif
```

### 3

下記の２つの間に記載する

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

```vim
  call dein#end()
  call dein#save_state()
end
```

記載の方法が２種類ある

* vimスクリプト
* tomlファイル

#### vimスクリプトでの記載

下記のようにgitのアカウント・リポジトリを指定する
https://github.com/Shougo/neocomplete.vim の場合

```vim
call dein#add('Shougo/unite.vim')
call dein#add('Shougo/neocomplete.vim')
```

第２引数に辞書型でオプションを指定できる

```vim
call dein#add('Shougo/vimfiler.vim', {
\ 'hook_add': 'nnoremap <silent>   [Space]v
\              :<C-u>VimFiler -invisible<CR>'
\ })
```
詳しくは下記を参考に
https://github.com/Shougo/dein.vim#options

#### tomlファイルでの記載

tomlファイルを生成し、記載

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

[[plugins]]
repo = 'Shougo/denite.nvim'
if = "has('python3')"
hook_post_source = '''
source $XDG_CONFIG_HOME/plugins/denite.rc.vim
'''
```

vimrcからtomlを読み込む

```vim
  call dein#load_toml($XDG_CONFIG_HOME . '/dein.toml', {'lazy' : 0})
  call dein#load_toml($XDG_CONFIG_HOME . '/deinlazy.toml', {'lazy' : 1})
```

### 4

インストール

```vim
" 未インストールがあればインストール
if dein#check_install()
  call dein#install()
endif
```

## 最終系

私のvimrcの内容をそのまま貼っておきます

```vim
if has('nvim')
  let s:dein_cache_path = expand('~/.vim/cache/nvim/dein')
else
  let s:dein_cache_path = expand('~/.vim/cache/vim/dein')
endif

if &runtimepath !~ '/dein.vim'
  let s:repos_path = s:dein_cache_path . '/repos/github.com/Shougo/dein.vim'
  if !isdirectory(s:repos_path)
    execute '!git clone https://github.com/Shougo/dein.vim.git ' . s:repos_path
  endif
  execute 'set runtimepath+=' . s:repos_path
endif

syntax enable

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

  call dein#load_toml($XDG_CONFIG_HOME . '/dein.toml', {'lazy' : 0})
  call dein#load_toml($XDG_CONFIG_HOME . '/deinlazy.toml', {'lazy' : 1})
  call dein#end()
  call dein#save_state()
endif

" vimprocだけ先にインストールしておく
if dein#check_install(['vimproc.vim'])
 call dein#install(['vimproc.vim'])
endif

" 未インストールのものがあればインストール
if dein#check_install()
  call dein#install()
endif
```

前回: [【vimめも】 12. タブ](https://qiita.com/r12tkmt/items/a5ae637d5c73b0da03e0)
次回: [【vimめも】 14. grep]
(https://qiita.com/r12tkmt/items/bd740d6cad232dd1a294)