function! s:context_filetype(num)
let start_time = reltime()
for i in range(a:num)
call context_filetype#get()
endfor
return str2float(reltimestr(reltime(start_time))) / a:num
endfunction
function! Check()
let num = 10
" context_filetype#get() の1回辺りの処理時間を計測
echo s:context_filetype(num)
endfunction
1 から派生。
巨大なファイルの場合だと重いという事で実際の処理速度を測ってみました。
実測のチェック関数
対象のファイル
適当なファイルが無かったので eval.txt(約8000行)をバッファにコピーし、行頭
python << HOGEHOGE
、行末にHOGEHOGE
を追加して、set filetype=vim
として試してみました。実行速度
以下の各行で
call Check()
した結果です。 また、stopline と timeout は使用していない状態です。また、コンテキストがネストしているとその分だけ searchpos を処理する回数が増えるので更に時間がかかると思います。
原因
対応策
個人的には stopline の閾値だけがユーザ側で設定出来れば十分だと思います。
その他
試しに下記のように autocmd CursorMoved で処理するようにしてみました。 これを↑のファイルで動作させてみたんですが個人的にはあまり重いとは感じないレベルでした。