Vimscript制御構造のふしぎ

2009.12.06 Author: 路地

Vimscriptは文法をチェックしないで1行ずつ実施する為か、下記の様なスクリプトもエラー無く実行できます。

function! Test()
for i in [ 1 , 2 , 3 ]
echo i
return
endfunction

本来ならば、forの終わりにendforが必要ですが、for内でreturnを読み込んだため、endfunctionまで一気に向かってしまいます。

そんな1行ずつ実行する性質はExコマンドモードで制御構文を直接打つ事でも確認できます。 Vimのノーマルモードで、以下の様に実行すると

for i in range(10)
echo i
endfor

"echo i"を入力した段階で、"0"が出力(echo)され、"endfor"を入力すると、残りの 1~9が出力されます。