Vim 8.2 で Vim script に -> 演算子が追加された
Vim 8.2 で Vim script に -> 演算子が追加されました。
これは f(x, y)
を x->f(y)
という風に書くための演算子になります。
例えば
echo map(filter(range(1, 10), { -> v:val % 2 == 0 }), { -> v:val * v:val })
というようなネストしている関数呼び出しを
echo 1 \ ->range(10) \ ->filter({ -> v:val % 2 == 0 }) \ ->map({ -> v:val * v:val })
のように記述する事ができます。
これはユーザ定義関数でも利用する事ができます。
function! s:plus(a, b) return a:a + a:b endfunction echo 1->s:plus(2)->s:plus(3)
便利。
注意
組み込み関数によっては f(x, y)
が x->f(y)
ではなくて y->f(x)
になる場合があるので注意する必要があります。
例えば printf(fmt, a)
は a->printf(fmt)
となります。
echo 42->printf("%04x") " output: 002a
関数によって ->
の挙動が異なるの、マジで頭がおかしいと思うのでどうにかしてほしい…なんでこんなひどい仕様にしてしまったのか…。
こういうのはちゃんと統一性を保ってほしいんですがどうにかなりませんかね…。
やっぱり Vim script はクソ