Vim script の関数名について
昨日の vimrc読書会でちょっと話題になったので覚書程度に。
信ぴょう性は薄いです。
さて、Vim script の関数名なんですが基本的には次のようなルールで使用することが出来ます。
" 関数名には基本的に英数字と '_' が使用出来る " グローバル関数 " どこからでも呼び出すことが出来る function! Global() echo "global function" endfunction " スクリプトローカル関数 " 基本的には定義したスクリプトファイルからのみ呼び出すことが出来る function! s:script_local() echo "script local" endfunction " autoload 関数 " runtimepath の autoload に置かれているスクリプトファイルで定義される " 呼び出し方はグローバル関数と同じ " autoload/hoge/foo.vim で定義するのであれば function! hoge#foo#bar() echo "script local" endfunction " 辞書関数 " 辞書からクラスメソッドのような形で呼び出すことが出来る関数 let dict = {} function! dict.func() echo "dict function" endfunction call dict.func()
基本的には上記のような感じで使用します。
しかし、関数名に ':' が入っていれば大文字で始まらなくてもグローバル関数として定義されるらしいです。
(不正な関数名を定義しようとすると『E128: 関数名は大文字で始まるかコロンを含まなければなりません』みたいなエラーメッセージが出力される。
なので、次のような関数名はエラーにならずにグローバル関数として定義され問題なく使用することが出来ます。
" s: ではなくて x: で定義する function! x:hoge() echo "x:hoge" endfunction " 適当な箇所に : を入れる function! hoge:foo() echo "hoge:foo" endfunction " 末尾でもOK function! hoge:() echo "hoge:" endfunction
Vim script こわい。
ただ、:help E124 を見る限りでは ':' に関することは追求されていないのでこれが仕様なのかバグなのかはよくわかりません。
まぁ基本的には使用しないほうが無難かなぁ。