NeoBundleのキャッシュ機能を利用したVimの起動を高速化する設定法まとめ

Vimプラグインを管理するためのプラグイン、NeoBundleには、Version 3.0からプラグインをキャッシュする機能が追加された。
>> (https://github.com/Shougo/neobundle.vim/commit/fc8818ccbc2db471f4de3501a69c66d3bb798df0)
この機能を利用することで、プラグインを大量にインストールしたVimでも、高速に起動することが可能になる。


本記事では、NeoBundleのキャッシュ機能の設定方法について述べる。
また、Vimの起動がどの程度高速化するのか、実際に起動速度を測定し、検証した結果も述べる。


                  • -

※2015.5.12追記
NeoBundleのキャッシュ機能に関して、仕様が変更された。
(詳細: https://github.com/Shougo/neobundle.vim/commit/69cb3b2d3c159207e1a2620c51b6fe754289c841)


以下、仕様変更の内容を一部抜粋する。

  • 関数: neobundle#has_cache(), neobundle#has_fresh_cache()を廃止
  • コマンド: NeoBundleLoadCacheを廃止
  • 上記の関数/コマンドの代わりに、neobundle#load_cacheを追加


以上の項目は、本記事の内容にも影響を及ぼす。
よって、最新の仕様に合わせて、本記事の一部を修正した。

                  • -



環境

  • Vim (7.4.473)
  • NeoBundle (3.0)

設定方法

設定は、NeoBundleのキャッシュ機能を有効にする記述を、.vimrcに書込むだけである。

具体的には、.vimrcの適切な箇所に、以下の内容を記述する。
(Vimプラグインは、"$HOME/.vim/bundle"以下に格納されているものとする。)

if has('vim_starting')
    set nocompatible
    set runtimepath+=expand('$HOME/.vim/bundle/neobundle.vim')
endif
 
call neobundle#begin(expand('$HOME/.vim/bundle'))

call neobundle#load_cache  " キャッシュの読込み
 
" 以下、インストールするプラグインの指定
" NeoBundle自身
NeoBundleFetch 'Shougo/neobundle.vim'
 
" その他のプラグイン
NeoBundle 'hoge/piyo.vim'
      (中略)
NeoBundle 'foo/bar.vim'
" ここまで、インストールするプラグインの指定
 
NeoBundleSaveCache  " キャッシュの書込み
 
call neobundle#end()
filetype plugin indent on

利用方法

上記の設定を書込んだ後、初回の起動時にキャッシュの作成がおこなわれる。
次回以降の起動から、キャッシュを利用した高速起動が実行される。


キャッシュを明示的に作成したい場合は、:NeoBundleSaveCacheを実行する。
また、作成したキャッシュを削除したい場合は、:NeoBundleClearCacheを実行すれば良い。


キャッシュファイルのデフォルトの作成場所は、.neobundle/cacheである。
作成場所を変更したい場合は、"let g:neobundle#cache_file = '/path/to/cache_file'"を追記する。

検証

Vimの起動時間がどの程度短縮されたのかを調べるために、実際に検証をおこなった。
検証は、実機マシン上で、Vimの--startuptimeオプションを用いておこなった。
検証に使用したマシン環境は、以下の2つである。

マシン1:Lenovo Thinkpad X121e

  • CPU:AMD E-450 (2 core 2 thread, 1.65GHz)
  • メモリ:8GB (DDR3-1333)
  • ストレージ:SSD 256GB (CFD_CSSD-S6TM256NMPQ)
  • OS:Arch Linux (x86_64, Kernel 3.14.23-1-lts)

マシン2:Dell OptiPlex 9020



両マシンとも、同一の.vimrcを用いて計測をおこなった。
使用した.vimrcは、行数:2948(実効行数:980)、使用プラグイン数:120である。

検証結果

マシン1

$ vim -c 'NeoBundleClearCache | q' # キャッシュのクリア
$ vim --startuptime /tmp/cache_test -c q && tail -n 1 /tmp/cache_test | awk '{print $1}'
764.863
$ !-2:s/Clear/Save # キャッシュの有効化
$ !-2
561.097

マシン2

$ vim -c 'NeoBundleClearCache | q' # キャッシュのクリア
$ vim --startuptime /tmp/cache_test -c q && tail -n 1 /tmp/cache_test | awk '{print $1}'
6540.807
$ !-2:s/Clear/Save # キャッシュの有効化
$ !-2
5260.234
マシン1では、キャッシュ無: 764.863(msec)、キャッシュ有: 561.097(msec)、
マシン2では、キャッシュ無:6540.807(msec)、キャッシュ有:5260.234(msec)、という起動速度であることが判明した。
つまり、NeoBundleのキャッシュ機能を有効にすることで、マシン1では約200msec、マシン2では約1280msec、起動時間が短縮された。
以上の結果より、NeoBundleのキャッシュ機能によって、Vimの起動を2割程度、高速化できることを確認した。

参考にしたもの

  1. :help neobundle
  2. Vim - NeoBundle のキャッシュ機能 - Qiita
    http://qiita.com/hokorobi/items/0663da130f54bac3ce1a
  3. Big Sky :: vimmer必読!読み込みの遅いvimscriptを見つけ出す方法
    http://mattn.kaoriya.net/software/vim/20091104214557.htm

雑記

  • Vimの起動時間が1000ms以内の、元々起動が速い環境では、キャッシュの効果はあまり実感できないかも。

>> Cygwinのような遅い環境向け??

  • Cygwin環境のVim、重すぎ... いくらforkが遅いといっても、起動に数秒もかかってしまうのは勘弁してほしい。