Skip to main content
  1. Posts/

Profiling Vim

·329 words·2 mins·
Developer Tools
Table of Contents

I like Vim because it’s very fast. Unfortunately the other day I found myself opening a diff file that took forever to load. The file had 58187 (this number will be important later on) lines in it but I never thought Vim would choke with something that was less than 2M size.

This post was originally published on medium

Finding out which plugin is making Vim slow
#

If you find yourself in a similar situation this is what you can do in order to find out what is causing Vim to slow down.

  1. Open Vim and start profiling

    :profile start /tmp/profile.log
    :profile func *
    :profile file *
    

    This is telling Vim to save the results of the profile into /tmp/profile.log and to run the profile for every file and function.

    Note: The profile.log file only gets generated until you close Vim.

  2. Do the action that is taking a long time to run (in my case opening the diff file)

    :edit /tmp/file.diff
    :profile pause
    :q!
    
  3. Analyze the data

    There is a lot of information in /tmp/profile.log but you can start by focusing on the Total time. In my case there was a clear offender with a total time of more than 14 seconds! And it looked like this:

    FUNCTION <SNR>24_PreviewColorInLine() 
    Called 58187 times 
    Total time: 14.430544 
    Self time: 2.961442
    

    Remember the number of lines in the file I mentioned before? For me it was interesting to see that the function gets called just as many times.

  4. Pinpoint the offender

    Finding out where a function is defined is very easy thanks to the <SNR> tag and the number right after it. You simply need to run :scriptnames and scroll until you find the index number you are looking for, in my case 24.

    24: ~/.vim/bundle/colorizer/autoload/colorizer.vim
    

I opened up a GitHub issue to make the developers of the plugin aware but it seems as if the project has been left unmaintained so I decided to remove it from my vimrc file.

Reply by Email