Vimを使っていたら
Cannot find color schemeと言ったいつも使っているカラースキーマが見つからない、
と言うエラーが出ました。
今回の原因はプラグイン管理のプラグインdein
によってruntimepathがキャッシュされていて更新されていないことでした。
起こった問題
Vimを立ち上げると
Warning: Cannot find word list "en.utf-8.spl" or "en.ascii.spl"
Warning: Cannot find word list "en.utf-8.spl" or "en.ascii.spl"
Error detected while processing /home/user/.vimrc:
line 868:
E185: Cannot find color scheme 'ron'
Press ENTER or type command to continue
みたいなエラーが出ました。 word listが見つからない、という注意と、vimrcの中で設定している colorschemeが見つからないというエラーが出ています。
ronはデフォルトで入っているテーマです。
インストールしたディレクトリ($(which vim)/../share/vim/vim80/colors/)
に行ってみるとちゃんとron.vimは存在します。
ただし、このVimはstow-get
を使って入れていて上記のディレクトリ(vimディレクトリ)が
シンボリックリンクになっていて実体は別の所(../stow/vim-STOW-8.0.0728/share/vim)にあります。
解決
Vimではこのvim80の様な
colorsやsyntaxと言ったディレクトリを持つディレクトリを
runtimepathというリストに入れ、
その中からファイルを読み込み色々と設定を行います。
このruntimepathを調べるにはコマンドモードで
:set runtimepath?
とすると見ることが出来ます。
runtimepath=~/.vim,~/.vim/dein/repos/github.com/Shougo/vimproc,~/.vim/dein/repos/github.com/Shougo/dein.vim,~/.vim/dein/repos/github.com/Shougo/neocomplete.vim,~/.vim/dein/.cache/.vimrc/.dein,~/usr/local/stow/vim-STOW-8.0.689/share/vim/vimfiles,~/usr/local/stow/vim-STOW-8.0.689/share/vim/vim80,~/usr/local/stow/vim-STOW-8.0.689/share/vim/vim80/pack/dist/opt/matchit,~/.vim/dein/.cache/.vimrc/.dein/after,~/usr/local/stow/vim-STOW-8.0.689/share/vim/vimfiles/after,~/.vim/after
これを見るとHOMEの~/.vimの後にdeinで管理しているプラグイン用のディレクトリ等が最初に来て
その後にある~/usr/local/stow/...にあるのがインストールしたVimのディレクトリです。
これを見ると~/usr/local/bin/vim(これもシンボリックリンク)を呼んでも
runtimepathはリンク元のファイルの位置から見てパスを決めている様です。
ここで問題が起こったのはVimをアップデートした後です。
上のを見て分かるように、
前にインストールしていたバージョンが8.0.689で
新しいのが8.0.728ですが、
設定されているruntimepathは古いままになっています。
これはdeinの仕様で
起動を速くするために
読み込むファイルをキャッシュしておくことをしているためです。
この中でruntimepath自体もキャッシュして変更しないような設定になっている様。
これをリセットするにはVimを立ち上げて
:call dein#recache_runtimepath()
します。
これでVimを再起動して上がれば上記のエラーは消えます。
コレ以外にも使用しているプラグインのファイルを直接書き換えて
Vimを立ち上げてもdeinを使っているとすぐには反映されません。
この場合にもrecache_runtimepathを呼ぶとキャッシュがリセットされて
変更内容が反映されます。
その他の場合
deinのキャッシュの問題では無い場合、
よくあるのがプラグイン管理プラグインを使っていて
colorschemeの設定を呼ぶ位置がおかしいことです。
Cannot find color scheme solarized · Issue #104 · altercation/vim-colors-solarized
大概のその様なプラグインでは管理するプラグインを設定する前後に
start/end関数を呼んで、その後にsyntax on
をしてその他の設定を読み込んで行くようなことをします。
この時、colorschemeの設定をend関数の前、カラースキーマのプラグインをインストールする様に
読んだ直後に書いたりしているとエラーが出る事があります。

