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
関数の前、カラースキーマのプラグインをインストールする様に
読んだ直後に書いたりしているとエラーが出る事があります。