reti.vim でクロージャ
簡単に。
[ソース]
function! s:make_counter() let n = 0 return reti#execute("let n += 1 | return n", l:) endfunction let s:counter = s:make_counter() echo s:counter() " => 1 echo s:counter() " => 2 echo s:counter() " => 3 echo s:counter() " => 4
関数の参照が大文字から始まらなければならないのと処理を文字列で定義する必要があるので、複雑な処理を書く場合は不向きかなぁ。