Vim script の関数に closure 機能が実装された

Vim の patch 7.4.2120 で Vim script の関数に closure 機能が実装されたました。

github.com

これは :function の引数に closure キーワードを追加することで、関数内から関数外の変数を参照できるような機能です。

function! s:main()
    let value = 0
    let list = []

   " closure を付けて関数を定義
    function! s:closure() closure
       " 関数外のローカル変数が参照できる
        let value += 1
        call add(list, value)
    endfunction
    call s:closure()
    call s:closure()
    call s:closure()

    echo value
   " => 3
    echo list
   " => [1, 2, 3]
endfunction
call s:main()

これはすごい。