dein.vimでcolorschemeを使う時にハマったこと

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本体の管理と、それを反映させる記述を同じ場所で出来たら便利だと思うので、この方法はとてもいいように思います。。が…ダメでした。。詳しく原因を調べてはいないですが…ダメでしたね。何が違ってたんだろ。。

 

まとめ

ざっくりですが、次回自分が困った時に見直せるようにメモ程度に残しておきます。
このやり方がベストかどうかは…わからんですが、とりあえず現時点で動きましたよって事で〜

Pocket
このエントリーを Google ブックマーク に追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください