vim リストを代入

2010.05.17 Author: 路地

またまたvimのお話です。
vimでは他のいくつかの言語と同じように変数に値を代入するとき、左辺にリストを持ってくる事ができます。

let [ foo , bar ] = [ 10 , 20 ]
echo foo " 10
echo bar " 20
let [ foo , baz ] = [ 10 , [ 20 , 30 ] ]
echo foo " 10
echo baz " [ 20 , 30 ]

これを使うとmatchlist関数を受け取るときに便利です。 matchlist関数は matchlist({expr}, {pat}[, {start}[, {count}]]) という書式で、評価するとマッチした結果を10個の要素を持つリストで返します。 ※マッチしないと空にリスト[]を返す

let [ match , sub1 , sub2 , sub3 , sub4 , sub5 , sub6 , sub7 , sub8 , sub9 ] = matchlist( '2010/05/17' , '\(\d\{4}\)\/\(\d\{2}\)\/\(\d\{2}\)' )
" ['2010/05/17', '2010', '05', '17', '', '', '', '', '', '']

上の文の問題は左辺と右辺の数が合わないとエラーになる為、matchlistが必ずマッチしないとダメと言うところですね。その辺は一旦別の変数を経由してマッチしたかどうか調べればよいと思いますが、面倒ですね。 代入が式ではない悲しさを感じます。