Vimのランタイムパスを確認する(runtimepath)
プラグインを手動でディレクトリに配置したのに読み込まれない。原因を探るには、まずVimがどこを見に行っているのか、その検索先一覧を知る必要がある。
runtimepathを確認する
:set runtimepath?
:set rtp? " 省略形
設定ファイルやプラグインを読み込む対象ディレクトリの一覧が、指定された並び順で表示される。この並び順どおりに検索・読み込みが行われるため、同名のファイルが複数の場所にある場合は先に見つかったほうが優先される。
ディレクトリを追加する
set runtimepath+=~/my-vim-plugin
手動でプラグインを配置した場所や、自作のスクリプトを置いたディレクトリを検索対象に加えたいときは、このように追記する。プラグインマネージャを使っている場合は通常自動的に設定されるため、意識する場面は限られる。
読み込みの確認は:scriptnamesとセットで
runtimepathはあくまで「検索先の候補」であって、実際に読み込まれたかどうかまでは分からない。設定を追加したのに反映されない場合は、:scriptnamesで実際に読み込まれたファイルの一覧も確認し、両方をあわせて切り分けるとよい。runtimepathに含まれているのに読み込まれていないなら、ファイル名や配置場所の規約(plugin/ディレクトリ配下かどうかなど)を疑う。
設定ファイル自体の場所も含まれる
runtimepathには、プラグイン用ディレクトリだけでなくvimrc/init.lua本体の置き場所も含まれている。設定ファイルの読み込み優先順位を意識したいときや、複数の設定ファイルを使い分ける環境を作りたいときにも、この一覧が判断材料になる。
Windows/Linux/Macでのデフォルトの違い
デフォルトのruntimepathにはOSごとに異なるパスが含まれている。トラブルシューティングで他の人の設定と見比べる際は、OSの違いによるパスの差を前提に読むと混乱が少ない。
runtimepathに対象のディレクトリが含まれているかを確認する。含まれているのに読み込まれない場合は:scriptnamesで実際の読み込み状況もあわせて調べる。
自作のスクリプトを配置したのに読み込まれず悩んだとき、runtimepathにそもそも対象ディレクトリが含まれていないことに気づいて解決したことがある。プラグインマネージャに任せきりだと意識しない設定だが、自分でファイルを配置する場面では欠かせない知識だと実感した。以来、新しい環境を作るたびに一度は内容を眺めるようにしている。
Neovimではpackpathも関係する
Neovimではruntimepathに加えてpackpathというオプションもプラグイン検索に関わる。ネイティブのパッケージ機能(:h packages)を使う場合はこちらも合わせて確認する必要があるが、多くのプラグインマネージャは内部でこの仕組みを利用しているため、直接意識する場面はそれほど多くない。
まとめ
runtimepathはVimがファイルを探しに行く場所のリストだ。プラグインや設定が読み込まれないトラブルの切り分けでは、まずここを確認するのが基本になる。