devroom.io/drafts/2012-03-21-from-11-34s-to-0-625s-for-opening-a-rb-file-in-vim.md

53 lines
2.6 KiB
Markdown
Raw Normal View History

2013-03-22 22:53:57 +00:00
---
title: "From 11.34s to 0.625s for opening a .rb file in Vim"
kind: article
slug: from-11-34s-to-0-625s-for-opening-a-rb-file-in-vim
created_at: 2012-03-21
tags:
- Ruby
- 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.