Vimスクリプトを:profileする方法

LingrVim部屋
vim-jp – Lingr
でShougoさんにVimスクリプトをプロファイリングする方法について教えてもらったのでメモ。

profile機能がサポートされているVimを用意する

大抵のVimではprofile機能がサポートされていないので自前でビルドする必要があるとのこと。


profile機能をサポートしているかは

:echo has('profile')

で確認できます。1が返ってきたらサポートされてます。

:profile

:profile start result.txt
:profile func eskk*

これで「eskk*」にマッチする関数を調べることができます。
グローバル関数だと楽ですが

let dict = {}
function! dict.func() dict
    echo 'func'
endfunction

のようなディクショナリ関数は関数名を特定するのが難しい*1ので
プロファイルも難しくなるとのこと。


また関数単位でしかプロファイリングできないので、
それより細かい部分はreltime()を使うなどして
プロファイリングする必要があります。

ファイル書き出し

ファイルはしばらく使ってからVimを終了すると、
自動的にresult.txtに結果が書き出されます。
あまりに量が多いとうまく書き出せないこともあるとのこと。

おわり

思ったより簡単ですね。:profile++

*1:不可能ではない