Vim の autoload で定義されてある foo#init() を自動的に呼ぶ
元ネタ
と、いう事で autocmd SourcePre で自動的に foo#init() を呼ぶようなスクリプトを書いてみました。
[ソース]
" s:call_init("autoload/hoge/foo.vim") => call hoge#foo#init() function! s:call_init(file) let funcname = substitute(matchstr(substitute(fnamemodify(a:file, ":r"), '\\', '/', 'g'), '.*\/autoload\/\zs.*\ze'), '/', '#', 'g') . "#init()" try execute "call" funcname catch " echo v:exception . v:errmsg endtry endfunction autocmd SourcePre */autoload/* call s:call_init(expand("<afile>"))
autoload 関数は最初に呼ばれるときに :source するのでそれにフックして init() を呼ぶようにしています。
ってか、autoload が :source した場合でも autocmd SourcePre はちゃんと呼ばれるのか。知らなかった。