Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

NeoBundleからdein.vimへの移行

$
0
0

5年ほど前に構築したVimの環境を使いまわしていたら、いつの間にかNeoBundleがオワコンになっていたようでdeinに移行したよという話です。基本的には NeoBundle から dein.vim に乗り換えたら爆速だった話 - Qiitaを参考にしたのですが、一部設定で分かりづらいことがあったので備忘録もかねて残しておきます。

deinをインストール

vimrcにdein用の設定を追加します

.vimrc
"#####dein設定#####" プラグインがインストールされるディレクトリlets:dein_dir= expand('~/.cache/dein')" dein.vim 本体がインストールされるディレクトリlets:dein_repo_dir=s:dein_dir.'/repos/github.com/Shougo/dein.vim'" dein.vim がなければ github から落としてくるif&runtimepath !~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
    execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_direndif
  execute 'set runtimepath^='. fnamemodify(s:dein_repo_dir,':p')endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)" プラグインリストを収めた TOML ファイル" 予め TOML ファイル(後述)を用意しておくletg:rc_dir= expand('~/.vim/rc')lets:toml=g:rc_dir.'/dein.toml'lets:lazy_toml=g:rc_dir.'/dein_lazy.toml'" TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml,{'lazy':0})call dein#load_toml(s:lazy_toml,{'lazy':1})" 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif"#####基本設定#####" syntax on  "シンタックスハイライトを有効にする" colorscheme slate

ここで1つだけ注意点があって、シンタックスハイライトなどの設定はdeinの設定の後に書かなければなりません。私の環境だけかもしれませんが、deinの設定より前に書いた場合設定が反映されませんでした。

プラグインをTOMLで管理

上のvimrcの中にあるように、2種類のTOMLファイルを用いてプラグインを管理します。
この機能が個人的にはNeoBundleからdeinへの移行で最もうれしい点なのですが(私が知らないだけでNeoBudleの時から同様のことはできたのかもしれません)deinではvimrcとは別にTOMLファイルでプラグイン及びプラグインごとの設定を管理することにより、vimrcを汚すことなくプラグインを楽に管理できます。さらにVim起動の高速化には欠かせない遅延処理も以下のように2つのファイルを使用することで簡単に行えます。
1. Vimの起動と同時に読み込まれるプラグイン
~/.vim/rc/dein.toml
2. 特定の条件下で読み込まれるプラグイン
~/.vim/rc/dein_lazy.toml

1. dein.toml

ここでは一例としてNERDTreeのみを入れてみます。

dein.toml
# dein本体。基本は repo に github のリポジトリを設定するだけでよい[[plugins]]repo='Shougo/dein.vim'# NERDTreeの設定[[plugins]]repo='scrooloose/nerdtree'# 従来は vimrc に書いていたプラグインごとの設定を toml 内で管理できるhook_add='''"NERDTreeの自動起動(ファイル名指定時にはNERDTreeを表示しない)autocmdStdinReadPre*lets:std_in=1autocmdVimEnter*ifargc()==0&&!exists("s:std_in")|NERDTree|endif"Ctrl+n起動/終了map<C-n>:NERDTreeToggle<CR>'''

hook_addについては後述しますが、 hook_hogeでhookが発火するタイミングを調節し様々な設定を適用します。

2. dein_lazy.toml

ここでは一例としてTaglistのみを入れてみます。

dein_lazy.toml
# deinの遅延読み込みの際の条件指定# on_ft     ファイルタイプがマッチしたとき。String or List# on_path   パスが一致した時# on_func   呼び出し機能が一致した時# on_source プラグインがロードされたとき# on_cmd    コマンドが一致した時# on_map    キーが一致した時# on_i      on_event が奨励# on_event  eventが発生したら#           http://vim-jp.org/vimdoc-ja/autocmd.html#autocmd-events[[plugins]]repo='vim-scripts/taglist.vim'# どのタイミングでプラグインを読み込むのか指定# ここではファイルタイプが以下のいずれかに一致したときに読み込むように指定on_ft=['c','cpp','cmake']hook_source='map<C-t>:TlistToggle<CR>'

プラグインの読み込みタイミングについての詳細はdein.vim:tomlファイルでプラグイン管理する - Technical Noteのページやや下を参照。

hook の使い方

度々引用というか 最早コピペという感じもするのですが、詳しくは [dein.vim] hook の便利な使い方 - Qiitaを参照してください。上の設定でも出てきましたが、普段使うのは専ら hook_addhook_source及び hook_post_sourceの3種類だと思います。

  • hook_add
    プラグインがdeinに追加されたときに実行されます。即ち、 dein.tomlで管理しているプラグイン(Vimの起動時に読み込まれるプラグイン)に hook を追加する場合は必ず hook_addを使用するしかありません。

  • hook_source
    プラグインが読み込まれる直前に実行されます。即ち、 dein_lazy.tomlで管理しているプラグイン(何らかの条件下で読み込まれるプラグイン)に hook を追加する場合はこちらを使用すればよいと思います。ただしプラグインの機能を使用した処理を行う場合は、先にプラグインを読み込む必要があるので後述の hook_post_sourceを使用する必要があります。

  • hook_post_source
    プラグインが読み込まれた直後に実行されます。用途としては上述の hook_source内で書いた通りです。
    他にもいくつか用意されていますが、詳しくは冒頭の記事をご覧ください。


この他にも if文の追加依存関係の仕様変更などの細かい変更はあったようですが、ここではこれ以上触れません。この記事の初めにも書きましたが詳細については元記事を参照していただければと思います。丸投げするようですみません。。。
ともかく、これで無事NeoBundleからdein.vimへの移行が完了しましたので再び快適なVim生活を送れるよう改造していきたいと思います。後日、TOMLの設定等に対応したdotfilesの管理方法については記事を書く予定です!


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>