Vim で後から呼び出す関数を定義する
Lingr の Vim 部屋で
『vimrc で関数定義は最初に書きたいけど、処理は後ろのほうで行いたい』
みたいな話がでていたので書いてみた。
[ソース]
let s:apply = [] " 定義した関数をスタックにためるためのコマンド command! ENDfunction \ execute "function! s:func" . expand("<slnum>") . "() \n endfunction" \| call add(s:apply, function("s:func" . expand("<slnum>"))) \| execute "function! s:func" . expand("<slnum>") . "()" " これで関数を定義とスタックにためる処理が一緒に行われる ENDfunction echo "homu" endfunction function! s:apply_colorscheme(name) echo "colorschem " . a:name endfunction ENDfunction call s:apply_colorscheme("mami") endfunction echo expand("<slnum>") echo "mado" " なんかいっぱい処理 " 最後に登録されている関数を呼び出す call map(s:apply, "v:val()")
[出力]
25 mado homu colorschem mami
名前は適当。
最初に空の関数を定義しているのは function() 時にその関数参照を取得するため。
その後、実際の処理を定義する関数で上書きする。