gVimでプラグイン設定が反映されない原因(.vimrcと.gvimrcの違い)
ターミナルのVimでは動いていた設定が、gVimでは効かない・プラグインが読み込まれない、というトラブルに遭遇することがあります。原因の多くは、プラグイン管理などの設定をうっかり.gvimrc(GUI専用の設定ファイル)に書いてしまっていることにあります。
.vimrcと.gvimrcの役割分担
| ファイル | 役割 |
|---|---|
.vimrc(Windowsでは_vimrc) | Vim全体の設定。GUI・ターミナル問わず読み込まれる |
.gvimrc(Windowsでは_gvimrc) | GUI(gVim)起動時のみ読み込まれる、GUI固有の設定 |
読み込み順は.vimrcが先、.gvimrcが後になります。GUI固有の設定(フォント、ウインドウサイズ、メニューの表示/非表示など)を.gvimrcに書くのは正しい使い方ですが、プラグインマネージャーの設定やキーマッピングのような「ターミナルでもGUIでも効いてほしい設定」をここに書いてしまうと、ターミナルVimでは何も起こらない、という混乱を招きます。
.vimrcに書きます。.gvimrcにはフォントやウインドウサイズなど、GUI固有の設定だけを書きます。症状から原因を切り分ける
次のような症状が出ている場合、設定ファイルの置き場所を疑うとよいでしょう。
| 症状 | 疑う原因 |
|---|---|
| gVimでは動くのにターミナルVimでプラグインが読み込まれない | プラグイン管理の記述が.gvimrcに入っている |
| ターミナルVimでは動くのにgVimで一部の設定が反映されない | .vimrc側の設定が.gvimrc側の記述で上書きされている |
今どの設定ファイルが読み込まれているか確認する
:echo $MYVIMRC
:echo $MYGVIMRC
意図したパスと違う場所を指していないか、まずここで確認します。複数の設定ファイルを試行錯誤しているうちに、古いファイルが優先されていた、というのはよくある落とし穴です。
1ファイルにまとめてしまう選択肢もある
そもそも.vimrcと.gvimrcを分ける必要性を感じないなら、GUI固有の設定もhas('gui_running')で分岐させて.vimrc1本にまとめてしまう方法もあります。
if has('gui_running')
set guifont=Cascadia_Code:h12
set lines=40 columns=120
endif
ファイルを分けて管理する煩わしさがなくなり、設定がどちらに書いてあるか探し回る必要もなくなります。Neovimのinit.vimとginit.vimの関係、およびそちらでの現在の推奨アプローチ(UIEnterイベントの活用)については別記事で扱っています。
昔うっかりプラグイン管理の設定を.gvimrcに書いてしまい、SSH越しのターミナルVimでプラグインが一切読み込まれず長時間悩んだことがあります。原因が分かってからは、GUI固有の設定はhas('gui_running')の分岐で.vimrc側にまとめるようにし、ファイルをまたいで設定を探す手間自体をなくしました。
まとめ
プラグイン管理・キーマッピングは.vimrc、GUI固有の設定だけ.gvimrcという役割分担を守るか、いっそhas('gui_running')で1ファイルにまとめてしまうと、この種のトラブルを未然に防げます。