Vim script の奇妙なエラー
Vim script でよくわからないエラーがでたので覚書。
仕様なのかどうかは不明。
さて、Vim script では次のように関数内で関数を定義する事ができます。
[ソース]
function! s:func() " 関数内で関数を定義 function! Test() echo "Test()" echo function("Test") endfunction function! s:hoge() echo "s:hoge()" echo function("s:hoge") endfunction echo "s:func()" echo function("s:func") endfunction call s:func() call Test() call s:hoge()
[出力]
s:func() <SNR>438_func Test() Test s:hoge() <SNR>438_hoge
これは関数内ローカルな関数が定義される……のではなくてグローバルスコープで関数を定義した事と同等になります。
なのでスクリプトローカル関数を定義すればスクリプトファイル内から呼び出せるし、グローバル関数で定義すればどこからでも呼び出すことができます。
[s:_ から始まる関数を定義するとエラー]
上記の場合は問題ないのですが、次のように s:_ から始まる関数名を関数内で定義するとエラーになりました。
[ソース]
" OK function! s:_hoge() echo "s:_hoge()" echo function("s:_hoge") endfunction function! s:func() " Error function! s:_foo() endfunction echo "s:func()" echo function("s:func") endfunction call s:_hoge() call s:func() " call s:_foo()