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()

[出力]

s:func()
<SNR>478_func
R:\tmp\VIA3EA.tmp の処理中にエラーが検出されました:行   16:
E193: 関数の外に :endfunction がありました
s:_hoge()
<SNR>478__hoge
function <SNR>478_func の処理中にエラーが検出されました:行    3:
E126: :endfunction がありません


グローバルスコープでは問題なく定義できるので Vim script のバグなのかなぁ…。