読者です 読者をやめる 読者になる 読者になる

Vim の map() や filter() に渡すラムダ内で v:val や v:key が使用できる

Vim

ちょっとした小ネタですが、従来、map()filter() に渡す文字列式の中では v:valv:key を使用することが出来ます。

echo map([1, 2, 3], "v:val + v:val")
" => [2, 4, 6]

echo filter({ "mami" : 1, "mado" : 2, "homu" }, 'v:key =~ ''^m''')
" => {'mado': 2, 'mami': 1}

この v:valv:key ですが、ラムダ内でも参照することが出来ます。

echo map([1, 2, 3], { -> v:val + v:val })
" => [2, 4, 6]

echo filter({ "mami" : 1, "mado" : 2, "homu" : 3 }, { -> v:key =~ '^m' })
" => {'mado': 2, 'mami': 1}

文字列リテラル内で正規表現を記述する場合、少し難読化してしまうので、こういう風に利用すると読みやすくなりますね。