Vimスクリプトでスクリプトのディレクトリを取得する
タグ: vim / 初版公開: 2014-05-28

実行中のVimスクリプト自体のパスを取得するにはexpandを使って以下のようにする。 <sfile>は取り込まれたファイルのファイル名を示す文字列である。 また:pはフルパス名に変換することを指定する文字列である。

注意点として、この呼び出しはスクリプトファイルの直下で行うこと。 関数内では関数名が返却されてしまい期待どおりにパスが得られない。

let s:script_path = expand('<sfile>:p') "=> /home/xmisao/.vim/plugin/script_path.vim

スクリプトが存在するディレクトリを取得したい場合は:hを併用すると良い。

let s:script_dir = expand('<sfile>:p:h') "=> /home/xmisao/.vim/plugin

応用

if_rubyにおいてVimスクリプトからの相対パスでRubyスクリプトをロードすることも簡単に行える。

let s:script_dir = expand('<sfile>:p:h')

ruby <<RUBY
  require "#{VIM::evaluate('s:script_dir')}/foo/bar.rb"
RUBY