Vim Advent Calendar 2013 148日目: Vim 7.4.260 から g: から始まる関数名がエラーになるようになりました

の記事は Vim Advent Calendar 2013 148日目の記事になります。
参加者募集中です。


さて、このブログでも何回か記事にしたんですが、Vim 7.4.260 にて g: から始まる関数名がエラーになるようになりました。
これは Vim 側のバグで g:foo() のような関数名でも動作していたのが修正された形になります。
ただし、その後 264 で g: + 有効な関数名(大文字から始まる関数名)であればエラーにならない修正がはいりました。
つまり最新版では g: + 大文字から始まらない関数名がエラーになります。
そんなわけで 7.4.264 現在は以下のような動作になります。

" g: + 大文字ではない関数名はエラー
" これは func() が有効な関数名ではないため
" function! g:func()
"
" endfunction

" g: + 大文字から始まる関数名は有効
" これは g: を除いた Func() が関数名として有効であるため
function! g:Func()
    
endfunction

" グローバル変数と同じように
" g: を着けても着けなくても同様に呼び出すことができる
call g:Func()
call Func()


" g: を着けなかった関数も同様
function! Func2()
    
endfunction

" 呼び出し時に g: を着けても着けなくても呼び出すことができる
call Func2()
call g:Func()


g:foo() はエラーだけど g:Foo() はエラーにならなかったりと少しややこしいんですが、単に大文字から始まる関数名の g: がスキップされる形になると考えればそこまで難しくないかなーと思います。
グローバル変数も同様に g: を省略することができるので。
そんなわけで vimrc 等で g: から始まる関数を定義している方はご注意ください。
ちなみに g: 以外にも b: や w: から始まる関数名(バッファやウィンドウローカル関数ではなくてグローバル関数として定義されていた)も以前は動作していましたが今回の対応で動作しなくなっているので注意を。