読者です 読者をやめる 読者になる 読者になる

Vimプラグインの管理にdein.vimを使う

vim

家の前の日当たりがいい坂道にある桜がだいぶ咲いてきました。穏やかな春の陽気を感じます。

この週末は3連休ということもあり、いつかやろうと思っていたVimプラギンのパッケージマネージャの移行をしました。 今まで大変お世話になっていたneobundle.vimを卒業し、これからはdein.vimを使い始めます。

デインデイーン。闇の力を感じます。

こんな感じ.vimrcもスッキリしました。素敵です。

基本的な設定の形

call dein#begin('プラグインを管理する一番上のディレクトリ')
call dein#add('プラグイン名')
call dein#add('プラグイン名')
...
call dein#end()

vimrcの中で、上のようにdein#begin()dein#end()の行の間にインストールしたいプラグインの名前をdein#add('プラグイン名')で書いていけばオッケーなのでやさしかったです。

いろいろな設定

dein#add('プラグイン名', { オプション } )のように、第二引数には辞書形式でオプションを指定することができます。オプションを使うとプラグインの管理がもっと便利になります。 少しですがオプションを使った設定をしてみました。また、Vimを起動するだけでdein.vimとともに各プラグインがインストールされるようにもしてみました。

set nocompatible

" Vim起動完了時にインストール
augroup PluginInstall
  autocmd!
  autocmd VimEnter * if dein#check_install() | call dein#install() | endif
augroup END

" 各プラグインをインストールするディレクトリ
let s:plugin_dir = expand('~/.vim/bundle/')
" dein.vimをインストールするディレクトリをランタイムパスへ追加
let s:dein_dir = s:plugin_dir . 'repos/github.com/Shougo/dein.vim'
execute 'set runtimepath+=' . s:dein_dir

" dein.vimがまだ入ってなければ 最初に`git clone`
if !isdirectory(s:dein_dir)
  call mkdir(s:dein_dir, 'p')
  silent execute printf('!git clone %s %s', 'https://github.com/Shougo/dein.vim', s:dein_dir)
endif

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

  " ここからインストールするプラグインを書いていく
  call dein#add('Shougo/dein.vim')

  " インストール後ビルドする場合
  call dein#add('Shougo/vimproc.vim', {
        \ 'build': {
        \     'mac': 'make -f make_mac.mak',
        \     'linux': 'make',
        \     'unix': 'gmake',
        \    },
        \ })

  " 条件によって使ったり使わなかったり制御する場合
  call dein#add('Shougo/neocomplete.vim', {
        \ 'if' : has('lua')
        \ })

  " 依存関係がある場合
  call dein#add('Shougo/unite.vim')
  call dein#add('ujihisa/unite-colorscheme', {'depends' : 'Shougo/unite.vim'})

  " 手動でcall dein#source('プラグイン名')して使い始める場合
  call dein#add('Shougo/vimfiler', {'lazy' : 1})

  " 指定のファイルタイプ使う場合
  call dein#add('tpope/vim-rails', {'on_ft' : 'ruby'})

  " dein.vimで管理して更新だけするリポジトリ(NeoBundleFetchとおなじ)
  call dein#add('jszakmeister/markdown2ctags', {'rtp': ''})

  " サブディレクトリを指定してdein#add()する場合
  " frozenオプションは自動で更新しない
  " 自分で開発するプラグインの管理に便利
  call dein#local('~/src/github.com/violetyk',
        \ {
        \   'frozen' : 1,
        \   'depends' : [
        \     'kana/vim-gf-user',
        \     'Shougo/neosnippet.vim',
        \     'vim-jp/vital.vim'
        \   ]
        \ },
        \ [
        \   '*.vim',
        \   'neosnippet-*',
        \   'neocomplete-*',
        \   'scratch-utility'
        \ ])
  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on