Vim - Vim scriptなら関数呼び出しや関数名に変数展開を使える!
この記事はVim Advent Calendar 2013の39日目です。
前日はcocoponさんの【Vimカッコイイ計画最終章】もしCSSでVimのカラースキームがつくれたら…?でした。
Vimカッコイイ。
Vim scriptにおける関数のおさらい
Vim scriptでの関数定義は以下のようになっています。
function! s:foo_func() echo 'foo' endfunction
スコープによってs:
を付けずに大文字始まり(Foo_func
など)になったりしますが、
それを除けば他のプログラミング言語と同じようなルールになっています。
呼び出しのコードは次のようになります。
" fooと出力される call s:foo_func()
コード全体ではこのようになります。
function! s:foo_func() echo 'foo' endfunction " fooと出力される call s:foo_func()
Vim scriptなら変数展開で関数呼び出しできる!
こちらをご覧ください。
function! s:foo_func() echo 'foo' endfunction function! s:bar_func() echo 'bar' endfunction let s:name = 'foo' " fooと出力される call s:{s:name}_func()
変数s:name
が展開されて、これはs:foo_func()
として実行されます。
もちろんs:name
の値を'bar'
に変えるとs:bar_func()
として実行されます。
Vim scriptなら変数展開で関数定義できる!
さらにこの変数展開は関数定義時の関数名にも使えます。
let s:name = 'foo' function! s:{s:name}_other_func() echo 'other' endfunction " otherと出力される call s:foo_other_func()
すごい!Vimカッコイイ!
おわり
可読性が下がるので使わない方がいいと思います。
詳しく知りたい方は:help curly-braces-names
と:help curly-braces-function-names