Vim script の lambda でローカル変数をキャプチャする

どうせなら l: を使ってやるかーという感じでやってみました。

function! s:main()
    let a = 3
    let F = function({ local, b -> [extend(l:, local), a + b][-1] }, [l:])
    echo F(2)
   " => 5

    let a = -2
    echo F(5)
   " => 3
endfunction
call s:main()

lambda 内でも extend(l:, dict) はちゃんと動作するみたいですね。

[使用した vim のバージョン]

  • 7.4.2067