Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vim slow with ruby syntax highlighting

Tags:

vim

ruby

I've been using vim over ssh to work for a week or two now and all has been going great. Today I decided to add in some syntax highlighting, autocomplete, and some other general plugins. Set up vundle and went to work.

My current .vimrc can be found at https://github.com/scottopell/dotfiles/blob/master/.vimrc

I have cloned my vimrc and vim files onto my local ubuntu desktop and vim runs exactly as expected, no slowness on any files that I can find. Same plugins and same vimrc and no slowness on ruby files.

update

I can reproduce this issue with the following .vimrc

syntax on 

and an empty ~/.vim folder.

However, vim on this vps is very slow with ruby/haml files. Much moreso ruby files. When I open any ruby file, startup takes about 2 seconds (timed with --startuptime). With a comparable length haml file, its about .5 seconds. This slowness isn't just on startup either, moving around and editing the file are both painfully slow.

Haml/erb(they are basically the same)

268.818  000.005: before starting main loop 848.871  580.053: first screen update 

Ruby

199.613  000.004: before starting main loop 2937.859  2738.246: first screen update 

Without syntax highlighting on the same ruby file as above

149.047  000.004: before starting main loop 152.912  003.865: first screen update  

I have tried using mosh(http://mosh.mit.edu) and it doesn't help. not really relevant anymore

As you can see in my .vimrc file, I have tried a few different solutions to this problem. I have tried running with all plugins disabled (I moved them all from ~/vim/bundle/PLUGINNAME to ~/vim/bundle/disabled/PLUGINNAME, is this correct?), set ruby path, set foldlevel to manual, disabled my colorscheme, nothing helps. see edit3

I can post the full startupttime log for any file if that will help.
I have tested a few other languages(php, c, python, vimL) and none experience any slowdown.


EDIT: Just to clarify, I am running an ssh session with ssh user@server then once inside the server I am doing vim file.rb.

EDIT2: I just tried accessing the server directly and the slowness persists without ssh, I have updated to reflect that this isn't a problem with ssh.

EDIT3: I can reproduce the issue with a .vimrc file that contains the single line syntax on with an empty ~/.vim folder

EDIT4 I uninstalled my compiled version of vim and any versions that I may have installed through apt, manually removed all vim stuff from my system, and I can run vim with vim -u NONE /path/to/file.rb then do :syn on and the issue will be there. The file in question is a rails controller, but like I've said, I can recreate it to some degree with most any file, but rails controllers see to be the worst.

like image 298
ScottO Avatar asked Jun 03 '13 17:06

ScottO


2 Answers

The solution to this problem turned out to be the regex engine that vim uses. The speculation on #vim on freenode is that the ruby syntax files use something that is slower on the new regex engine.

Any version older than and including Vim 7.3.969 has the old regex engine. Add in set re=1 to your vimrc to force the old regex engine on any version newer (and don't forget to reload the file you're currently editing with :e).

Thanks to Houl, Dolio and dmedvinsky from #vim for help figuring it out.

I haven't had a chance to try the absolute latest version, there was a commit last night that may help with this issue. I will update this if I get the chance to try the bleeding edge version again.

like image 114
ScottO Avatar answered Sep 19 '22 20:09

ScottO


You should set this tw options in your vimrc:

set ttyfast set lazyredraw 

If this is not solving your problem try to start vim without your vimrc to be sure that none of your current settings are screwing it up.

vim -u NONE 
like image 40
Denny Crane Avatar answered Sep 18 '22 20:09

Denny Crane