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 はちゃんと呼ばれるのか。知らなかった。