【一人 vimrc Advent Calendar 2017】vimrc から別のスクリプトファイルを読み込む【4日目】
一人 vimrc Advent Calendar 2017 4日目の記事になります。
今回は vimrc
から別のスクリプトファイルを安全に読み込みます。
任意のスクリプトファイルを読み込む
さて、vimrc
が少し大きくなってくると
みたいに設定をファイル単位で分割したいと思うことがあると思います。
こういう場合は :source
コマンドを使って任意のスクリプトファイルを読み込むことができます。
" :soure {file} source /path/to/vimfiles/plugin.vim source /path/to/vimfiles/keymapping.vim source /path/to/vimfiles/command.vim source /path/to/vimfiles/filetype.vim
読み込むスクリプトファイルを絶対パスにする
さて、:source
を使うことで任意のスクリプトファイルを読み込むことができました。
しかし、以下のように『読み込む vimrc
からの相対パス』で :source
を読み込む場合は上手く動作しない可能性があります。
" vimrc と同ディレクトリにあるファイルを読み込む " しかし、これだと上手く読み込まれない可能性がある source ./plugin.vim source ./keymapping.vim source ./command.vim source ./filetype.vim
これは :source
が『:source
しているファイルのパスから』ではなくて『そのファイルを読み込んでいるカレントディレクトリから』のパスになるためです。
例えば、カレントディレクトリが /hoge/foo/
の場合に上記の vimrc
を読み込むと /hoge/foo/plugin.vim
などを読み込もうとしてしまいます。
なので、vimrc
で :source
を行う場合は『相対パス』ではなくて『絶対パス』にしておいたほうが安全です。
:source
で相対パスっぽくスクリプトファイルを読み込む
とはいえ、絶対パスにしてしまうとそれはそれで vimrc
のパスを変更した場合や、他の環境で同じ vimrc
を使う場合に不便です。
そこで <sfile>
を利用します。
" <sfile>:h + ファイルパスとする " 詳しくは " :help E498 " を参照してください。 source <sfile>:h/plugin.vim source <sfile>:h/keymapping.vim source <sfile>:h/command.vim source <sfile>:h/filetype.vim
<sfile>
は :source
の実行時に『読み込まれているファイルのパス』に置き換えられます。
そして :h
を付けることで『読み込まれているファイルのディレクトリパス』へと置き換えられます。
つまり、
source <sfile>:h/plugin.vim
というのは
source {vimrc のディレクトリパス}/plugin.vim
というような感じに置き換えられるので安全にスクリプトファイルを読み込むことができます。