init.vimとginit.vimの違い(Neovimの設定ファイル)
Neovimの設定ファイルを調べていると、init.vimと並んでginit.vimという名前を見かけることがあります。両方とも「設定ファイル」ではありますが、担っている役割は別物なので、混同しないよう整理しておきます。
init.vim:設定全般を書くファイル
Neovim公式ドキュメントでは次のように説明されています。
A file that contains initialization commands is generically called a "vimrc" or config file. Each line in a vimrc file is executed as an Ex command line.
要は、Vimでいう.vimrcにあたる設定ファイルで、1行1行がExコマンドとして実行されます。配置場所はOSによって異なります。
- Unix系:
~/.config/nvim/init.vim - Windows:
~/AppData/Local/nvim/init.vim
環境変数XDG_CONFIG_HOMEを設定すれば、$XDG_CONFIG_HOME/nvim/init.vimとして任意の場所に変更することもできます。なお、Lua設定を使う場合は同じ役割をinit.luaが担います。
ginit.vim:GUI専用の起動設定を書くファイル
ginit.vimはinit.vimと同じディレクトリに置くファイルで、GUIクライアント(nvim-qtなど)固有の起動コマンドを記述する場所として用意されています。読み込みタイミングはinit.vimの後になります。
現在はUIEnterイベントが推奨される
ginit.vimという仕組み自体は今も残っていますが、GUI固有の設定を書く方法として、現在はUIEnterautocommandを使う方が汎用的で推奨されています。UIEnterはGUIクライアントがNeovimにアタッチしたタイミングで発火するイベントで、init.vim(またはinit.lua)側に一元的に記述できます。
autocmd UIEnter * if exists('g:GuiLoaded') | echo 'GUIで起動しました' | endif
両者の違いをまとめると次のとおりです。
| ginit.vim | UIEnterイベント | |
|---|---|---|
| 設定ファイル | init.vimとは別ファイル | init.vim(またはinit.lua)に一元化 |
| 対応範囲 | 特定のGUIクライアント専用 | どのGUIクライアントでも共通 |
| 複数GUIの使い分け | 設定が分散しやすい | 1つの設定で完結しやすい |
複数のGUI(nvim-qt、Neovide など)を使い分けるほど、UIEnter側への一元化が効いてきます。
GUIクライアントの選択肢
Neovim自体はターミナル上で動くのが基本ですが、GUIで使いたい場合はいくつかクライアントの選択肢があります。古くからあるnvim-qtのほか、滑らかな描画とリガチャ表示に強いNeovideも広く使われています。どちらを使うかによって、GUI固有設定の書き方が多少変わる点には注意が必要です。
以前はginit.vimにGUI用のフォント設定などをまとめて書いていましたが、GUIクライアントを乗り換えたタイミングで設定を移し替える手間が発生しました。UIEnter側に書き直してからは、init.vim1本で完結するので管理が楽になりました。
まとめ
init.vimはNeovim設定全般、ginit.vimはGUI固有の起動設定という役割分担は今も変わりません。ただしGUI設定については、UIEnterイベントを使ってinit.vim側にまとめる書き方のほうが、複数GUIクライアントを使い分ける環境では扱いやすくなります。これらのファイルを実際にどこへ置くかは設定ファイルの配置場所で扱っています。置いたはずのファイルが読まれていないときは:scriptnamesで読み込み順を確認すると早いです。