Would you believe me if I told you that opening a simple Ruby file on my 2011 MacBook Pro takes 11.34 seconds?
To test this, I’ve used this command:
$ vim --startuptime log-before.txt app/models/user.rb
This command will time everything that Vim does until the file is ready for you to edit down to the millisecond. This is a great way to find out what’s slowing things down.
I’ll highlight the most interesting parts of
000.028 000.028: --- VIM STARTING --- 6643.597 5496.976 5496.976: sourcing /usr/share/vim/vim73/ftplugin/ruby.vim 11262.686 3963.993 3963.993: sourcing /Users/ariejan/.vim/bundle/vim-css-color/after/syntax/css.vim 11263.907 3976.912 004.334: sourcing /usr/share/vim/vim73/syntax/html.vim 11263.997 3977.361 000.449: sourcing /usr/share/vim/vim73/syntax/xhtml.vim 11340.533 000.004: --- VIM STARTED ---
These are the big spenders of loading a ruby file. Firstly there is
ruby.vim taking about 5.4 seconds to load. Then there is
css.vim taking another 3.9 seconds - and this file doesn’t even include CSS!
These two time sinking hogs are keeping me back – 11 seconds at a time.
vim-css-color. This plugin shows color hashes in their actual colour. So
#00f will have a blue background. Great when editing CSS files, but not all that import. I removed
Note: the reason
vim-css-color is slow with terminal vim is that is has to pre-compile colour hashes to ther xterm escape code equivalents. This is pretty time consuming.
ruby.vim. Why is this so bloody slow?
As it turns out, Vim has trouble finding the right
ruby for me. This can be remedied by adding the following snippet to your
~/.vimrc. It sets a logical search path for
if !empty($MY_RUBY_HOME) let g:ruby_path = join(split(glob($MY_RUBY_HOME.'/lib/ruby/*.*')."\n".glob($MY_RUBY_HOME.'/lib/ruby/site_ruby/*'),"\n"),',') endif
Again I ran my timer command (full output):
$ vim --startuptime log-after app/models/user.rb
Now look at that:
000.034 000.034: --- VIM STARTING --- 107.182 000.834 000.834: sourcing /usr/share/vim/vim73/ftplugin/ruby.vim 625.001 000.003: --- VIM STARTED ---
Yes, that is 0.625 seconds! I’m a happy ruby coder again.