vimのプラグインをdein.vimで管理し、カラースキーマもdein.vimで管理しています。
そこで、カラースキーマを呼び出そうとした際に「カラースキーマが無いぞ」って怒られたり、怒られないけど反映されてないみたいになった際の(自己流)対処です。
解決策
if dein#load_state('hoge') ...(省略)... call dein#load_toml(s:first_toml, {'lazy': 0}) call dein#load_toml(s:toml, {'lazy': 1}) call dein#end() call dein#save_state() endif colorscheme molokai filetype plugin indent on syntax enable
ざっくりこんな感じ。colorscheme molokaiの記述をdein#load_stateのifブロックの外に出しました。
(molokai自体は、first_tomlの中で普通に読み込んでいます。)
環境
- MacOS 14.4 (Mojave)
- VIM – Vi IMproved 8.1 (2018 May 18) (NeoVimじゃないよ)
ちょっとだけ解説
案1. dein-faq(Q&A) より
(dein.vimが有効になっている状態で) “:help dein-faq”と入力すると出てきます。
colorschemeとか検索すると該当する箇所が出てくるのですが、そちらには以下のように記述するように書かれていました。
Q: Cannot load colorscheme when reloading .vimrc.
A: You must write :colorscheme lines after dein#end().
call dein#add('tomasr/molokai', {'merged': 0}) ... call dein#end() colorscheme molokai
Or you can use dein#source() for it.
call dein#add('tomasr/molokai', {'merged': 0}) call dein#source('molokai') colorscheme molokai
まぁ、colorscheme molokaiをdein#endの後に書いてね。もしくは、sourceで読み込んでから…とのことでした。
自分も一度この方法を試したのですが…ダメでした。dein#endの後にcolorschemeを書いて、キャッシュをクリア`:call dein#recache_runtimepath()`をすると、次回起動の1回のみカラースキーマが読み込まれるのですが、2回目以降は読み込まれなくなってしまいます。
この原因としては、if dein#load_state(‘hoge’)で囲まれたブロックが内部(のプラグイン(?))に変更がない場合には読み込まれないようで、colorschemeの設定も飛ばされてしまうみたいです。
余談ですが、プラグインを増やしたり減らしたりした後の起動時のみはcolorschemeも反映されました^^;
案2. VimEnter に nested 指定
参考: dein.vimによるプラグイン管理のマイベストプラクティス – Qiita
こちらの手順は記事の通りです。自分もcolorscheme本体の管理と、それを反映させる記述を同じ場所で出来たら便利だと思うので、この方法はとてもいいように思います。。が…ダメでした。。詳しく原因を調べてはいないですが…ダメでしたね。何が違ってたんだろ。。
まとめ
ざっくりですが、次回自分が困った時に見直せるようにメモ程度に残しておきます。
このやり方がベストかどうかは…わからんですが、とりあえず現時点で動きましたよって事で〜