Tip 1232 Printable Monobook Previous Next
created 2006 · complexity intermediate · author muede · version 6.0
The original idea suffers from a typically too coarse time granularity of one second.
:command -complete=command -nargs=+ Time :let ct=strftime("%s") | exec <q-args> |let t=strftime("%s")| :echohl MoreMsg \|let min=(t - ct)/60 | let sec=(t - ct)%60 \|let min = min < 10 ? "0".min : min | let sec= sec<10 ? "0".sec : sec | echo min.":".sec | echohl None
This improved version needs Vim version 7.3 due to the printf() function, the use of floats and the reltime() function.
com! -count=0 -complete=command -nargs=+ Timer call s:Timer(<q-args>, <q-count>) fun! s:Timer(cmd, count) let rel = has("reltime") let ct = rel ? reltime() : localtime() let maxrep = a:count for i in range(maxrep) exec a:cmd endfor if rel let res = str2float(reltimestr(reltime(ct))) else let res = localtime() - ct + 0.0 endif redraw! echohl MoreMsg if maxrep > 1 echo printf("%*d rounds:\t%.02g sec", len(maxrep), maxrep, res) endif echo printf("%*d round :\t%.02g sec", len(maxrep), 1, res/maxrep) echohl None endfun
Use an optional count argument, to specify how many iterations should be made, e.g. :100Timer :call funcFoobar()
will call the function 100 times.