How to see which plugins are making Vim slow?
I have found it helpful to print all Vim activity to a file by starting Vim with the -V
option:
vim -V12log
This provides the maximum verbosity (level 12) and outputs it to the file log
. You can then perform some Vim actions which you know to be slow, and then see which functions/mappings are being called internally.
You can use built-in profiling support: after launching vim do
:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!
(unlike quitting noautocmd
is not really required, it just makes vim quit faster).
Note: you won’t get information about functions there were deleted before vim quit.
I found another very helpful vim buildin method to show the exactly timing messages while loading your .vimrc.
vim --startuptime timeCost.txt timeCost.txt
Please run:
:help --startuptime
in VIM to get more information.
It could be a plugin or the syntax highlighting; try a :syntax off
when this happens and see whether Vim instantly gets faster.
With plugins, a "general slowness" usually comes from autocommands; a :autocmd
lists them all. Investigate by killing some of them via :autocmd! [group] {event}
. Proceed from more frequent events (i.e. CursorMoved[I]
) to less frequent ones (e.g. BufWinEnter
).
If you can somewhat reliably reproduce the slowness, a binary search might help: Move away half of the files in ~/.vim/plugin/
, then the other, repeat in the set that was slow.
If you really need to look under the hood, get a Vim version that has the :profile
command enabled. (Not the vanilla BIG Windows version, but the one that ships with Cygwin has it; also, self-compiling is quite easy under most distros.)