第7回Vimスクリプト入門みたいの(リスト)

長くなったので分割して、書きだめするよ。汚いとか言うな。これは18日分。

" usr_41 vimスクリプトの作り方から
" 「41.8 リストと辞書」より
" 
" 変数の型について、あいまいな知識のままやってきたが、
" そろそろ文字列と数値以外の型が使いたい。そう思っていたら
" 丁度いい感じにマニュアルに書かれていた。試してみる。
"
" まず、サンプル。

let a = ['a', 'b', 'c']
echo a
echo a[1]
echo a[3]

" echo a は ['a', 'b', 'c'] と出力される。
" echo a[1] は b と出力される。
" echo a[3] はエラーが出る。
" 
" リストを走査するには :for が使えるらしい。
" 

let a2 = ['a', 'b', 'c']
for v in a2
  echo v
endfor
for i in range(len(a2))
  echo a2[i]
endfor

" 前者は素直に要素を見る例。for eachのイメージ。
" 後者は range() で0から要素数-1の添字のリストで回す例。Cのイメージ。
" len() はリストの要素数を返す。
" range() は数値のリストを返す。
" 
" ここまでの内容で、第1回に書いたFizzBuzzを書きなおしてみる。
"

for i in range(1, 100)
  if (i % 5 == 0) && (i % 3 == 0)
    echo 'FizzBuzz'
  elseif (i % 5 == 0)
    echo 'Buzz'
  elseif (i % 3 == 0)
    echo 'Fizz'
  else
    echo i
  endif
endfor

" 
" リストに使える関数は以下のあたりで見れる。
" :h List
" :h E714
" :h functions
" もっと良い一覧がありそう。とりあえず、自分なりの一覧を作ってみた。
"
" add()
" call()
" copy()
" count()
" deepcopy()
" empty()
" extend()
" filter()
" get()
" index()
" insert()
" join()
" len()
" map()
" match()
" max()
" min()
" range()
" remove()
" repeat()
" reverse()
" sort()
" split()
" string()
"
" range() と string() は微妙なところだけど、まぁいいかな。
" それぞれの例を書いたんだけど、すごく長くなったので、数回に
" 分けようと思う。
"
" 今回のまとめ
" :for
" :endfor
" len()
" range()
"