Sitemap
usevim

A blog about Vim

Improving Vim’s Startup Time

--

Once you’ve installed pathogen.vim or Vundle, installing Vim scripts becomes almost… addictive. Eventually Vim’s startup time may start to suffer. Or perhaps you’ve installed a new OS and you can’t work out why Vim is loading slowly.

Fortunately, recent versions of Vim come with the --startuptime command-line option:

$ vim --startuptime vim.log

This file should contain a heading and a list of timing messages:

times in msec
clock self+sourced self: sourced script
clock elapsed: other lines

000.006 000.006: --- VIM STARTING ---
000.082 000.076: Allocated generic buffers
000.299 000.217: locale set
000.303 000.004: clipboard setup
000.308 000.005: window checked
000.787 000.479: inits 1
000.793 000.006: parsing arguments
000.793 000.000: expanding arguments
003.495 002.702: shell init
003.874 000.379: Termcap init
003.890 000.016: inits 2
003.996 000.106: init highlight
052.048 000.250 000.250: sourcing /usr/local/Cellar/vim/7.3.333/share/vim/vim73/syntax/syncolor.vim

The header is two lines and refers to each type of timing message. It’s easier to understand if it’s broken down like this:

clock   self+sourced   self:  sourced script
052.048 000.250 000.250: sourcing /usr/local/Cellar/vim/7.3.333/share/vim/vim73/syntax/syncolor.vim
clock elapsed: other lines
000.006 000.006: --- VIM STARTING ---

What can we do with this? Well, let’s try piping it through sort -k 2 to easily find the slowest sourced scripts:

$ cat vim.log | sort -k 2
387.346 100.634: loading plugins
169.582 145.276 005.804: sourcing /usr/local/Cellar/vim/7.3.333/share/vim/vim73/syntax/syntax.vim
230.845 206.734 039.239: sourcing $HOME/.vimrc

It’s also worth launching Vim with different files so --startuptime measures what happens when a particular file type is read.

Slow Start

Typing :help slow-start shows Vim's built-in guidance on startup performance -- it suggests checking if Vim was compiled with X11, because loading shared libraries might be taking a noticeable amount of time. Starting Vim with -X will prevent Vim from trying to connect to an X server.

Loading the viminfo file can take a while too. Running Vim with -i NONE will stop it from loading viminfo files.

It’s also possible to load Vim without ~/.vimrc. This can be useful for determining if the problem is caused by your settings or the way Vim was built on your system:

vim -u NONE --startuptime vim-NONE.log

Profiling

Vim includes profiling tools that can be essential when debugging scripts. This can be used from the command-line to measure how long each function takes when Vim is started:

vim -c 'profile start vim.log' -c 'profile func *' -c 'q'

The profile start command expects a file name argument, and this file will be truncated and written to with debugging information.

References

I found the startup time measurement with profile tip in this post by ZyX: Profiling startup time.

--

--

No responses yet