読者です 読者をやめる 読者になる 読者になる

Vim 8.0 で追加された関数 funcref()

Vim

Vim 8.0 で新しく funcref() という関数が追加されました。 これは function() と同じように関数参照を取得する関数になりますが、『関数が上書きされても元の関数を呼び出す』という違いがあります。

function! Test()
    return "Test"
endfunction

let Function = function("Test")
let Funcref  = funcref("Test")

echo Function()
" => "Test"
echo Funcref()
" => "Test"

" 関数を上書きする
function! Test()
    return "new Test"
endfunction

" function() は上書きした関数を呼び出す
echo Function()
" => "new Test"

" funcref() は元の関数を呼び出す
echo Funcref()
" => "Test"

上書きされる可能性がある関数の参照を取得したい場合は funcref() を使用したほうが安全かもしれません。