Using vimscript lambdas with map
Vimscript has lambda functions, check them out with :help lambda
.
You don't have to reference an argument with the a:
prefix and returns are implicit.
Generally they take the form of:
:let Add = {a, b -> a + b}
:echo Add(1, 2)
3
You can also pass a lambda to the map func:
:let fruits = ['apple', 'orange', 'banana']
:echo map(fruits, {key, val -> "key: " . key . " val: " . val})
['key: 0 val: apple', 'key: 1 val: orange', 'key: 2 val: banana']
Alwyas be careful with vim's map()
though. It Mutates
To make sure you don't mutate the list you are mapping over, use copy()
.
:echo map(copy(fruits), {key, val -> "key: " . key . " val: " . val})
Tweet