Humanity

Edit the world by your favorite way

FuncUndefinedイベント

そういやVimPerlのAUTOLOADとかRubyのautoloadみたいなことをやるテクニックがhelpのどっかにあったなーと思って探したらあったのでブログに書いてみる。


FuncUndefinedイベントというのがあるのでこれを使えばよい。
「:help autoload-functions」より。

定義すべき関数名にマッチするパターンを指定してオートコマンドイベント
FuncUndefinedを使う。例: >

:au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim

ファイル "~/vim/bufnetfuncs.vim" は "BufNet" で始まる関数を定義しなければなら
ない。|FuncUndefined|も参照。

こんなことも。

if !exists('s:defined_autocmd')
  " もしPeekScriptLocalVars()が呼ばれた時に関数が定義されてなかったら
  " このコードが書かれているスクリプトファイルを読み込む
  execute 'autocmd FuncUndefined PeekScriptLocalVars source' expand('<sfile>')
  let s:defined_autocmd = 1
  finish
endif

function! PeekScriptLocalVars()
    ...
endfunction

関数単位でautoloadしたり色々できるので便利ですね。使わないと思いますが。