devroom.io/content/posts/2012-03-21-from-11-34s-to-0-625s-for-opening-a-rb-file-in-vim.md
2019-06-05 14:32:16 +02:00

52 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
date = "2012-03-21"
title = "From 11.34s to 0.625s for opening a .rb file in Vim"
tags = ["Ruby", "vim"]
slug = "from-11-34s-to-0-625s-for-opening-a-rb-file-in-vim"
+++
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 [`log-before.txt`](https://gist.github.com/2147190#file_log_before.txt) here:
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.
Let's see, `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 `vim-css-color`.
_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._
Next up: `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 `ruby`:
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](https://gist.github.com/2147190#file_log_after.txt)):
$ 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.