But sometimes, it slows down when performing certain tasks for no apparent reason. In particular, while making Ruby code examples for a presentation a few days ago, I noticed that opening/saving a ruby file took 3-5 seconds! Wanting my itch to be scratched, I decided to look for ways to profile the slowness away!
It’s really easy, just pop your vim open and type this in normal mode:
# save to ~/record.log :profile start ~/record.log # the profile for every function and file :profile func * :profile file * # do whatever's slow action that you want to record, for example: :open sample_ruby_file.rb :profile pause # required to quit to create ~/record.log :qall
Next you can now check the bottom of
under “FUNCTIONS SORTED ON SELF TIME”:
... FUNCTIONS SORTED ON SELF TIME count total (s) self (s) function 3 0.042048 0.015790 <SNR>4_SynSet() 1 2.495415 0.014309 <SNR>31_LoadFTPlugin() 6 0.009933 0.004577 <SNR>227_line() 1 0.006000 0.003480 <SNR>32_LoadIndent() 12 0.003720 0.002310 <SNR>227_expand() ... and more
In my case, since
31_LoadFTPlugin took 2 seconds, I went down the rabbit hole
of why this is slow and ended up in vim-ruby/ftplugin issues.
Luckily, it’s fixed in the latest vim-ruby. So I just had to update mine via
:PluginUpdate vim-ruby (for Vundler users).
So next time you see a large spike in your vim setup, profile the slowness away!
BONUS: Also, if your vim’s startup time is slow, you can still profile that with:
$ vim --startuptime time_cost.txt
There you have it! Happy fiddling around with vim!