Vim用ruby语法突出显示缓慢

我一直在用ssh使用vim工作一两个星期,一切都很顺利。 今天我决定添加一些语法突出显示,自动完成和其他一些通用的插件。 设置vundle并去工作。

我目前的.vimrc可以在https://github.com/scottopell/dotfiles/blob/master/.vimrc

我将我的vimrc和vim文件克隆到我的本地ubuntu桌面上,vim完全按照预期运行,没有find任何文件的缓慢。 相同的插件和相同的vimrc和ruby文件没有缓慢。

更新

我可以用下面的.vimrc重现这个问题

syntax on 

和一个空的~/.vim文件夹。

但是,vim在vps上使用ruby / haml文件很慢。 更多的ruby文件。 当我打开任何ruby文件,启动需要约2秒(定时 – 启动时间)。 与一个可比的长度哈姆文件,其约.5秒。 这种缓慢不仅仅是在启动时,移动和编辑文件都是痛苦的缓慢。

Haml / erb(他们基本上是一样的)

 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 

没有语法高亮在上面的相同的ruby文件

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

我曾尝试使用mosh( http://mosh.mit.edu ),并没有帮助。 不再真正相关了

正如你可以在我的.vimrc文件中看到的,我已经尝试了几个不同的解决scheme来解决这个问题。 我已经尝试运行所有插件禁用(我把它们从~/vim/bundle/PLUGINNAME~/vim/bundle/disabled/PLUGINNAME ,这是否正确?),设置rubypath,将foldlevel设置为manual,禁用我的colorscheme ,没有什么帮助。 见edit3

如果有帮助,我可以发布任何文件的完整startupttime日志。
我testing了其他几种语言(php,c,python,vimL),没有遇到任何减速。


编辑:只是为了澄清,我正在运行ssh用户@服务器ssh会话,然后一旦在服务器内我正在做vim file.rb.

编辑2:我只是试图直接访问服务器和缓慢持久没有SSH,我已经更新,以反映这是不是一个问题与SSH。

编辑3:我可以用包含单行syntax on的.vimrc文件重现与一个空的〜/ .vim文件夹

EDIT4我卸载了我的编译版本的VIM和我可能已经通过apt安装的任何版本,手动从我的系统中删除了所有VIM的东西,我可以用vim -u NONE /path/to/file.rb运行Vim然后:这个问题将在那里。 有问题的文件是一个轨道控制器,但正如我所说,我可以在一定程度上重新创build它与大多数文件,但铁轨控制器看起来是最差的。

这个问题的解决scheme竟然是vim使用的正则expression式引擎。 关于freenode的#vim的推测是ruby语法文件在新的正则expression式引擎上使用的速度较慢。

任何比Vim 7.3.969更早的版本都有旧的正则expression式引擎。 在你的vimrc添加set re=1 ,强制任何版本的旧版本的regex引擎(不要忘记重新加载你正在编辑的文件:e )。

感谢#vim的Houl,Dolio和dmedvinsky帮忙搞清楚了。

我没有机会尝试绝对最新的版本,昨晚有一个提交可能有助于这个问题。 我会更新这个,如果我有机会再次尝试最新的版本。

你应该在你的vimrc中设置这个tw选项:

 set ttyfast set lazyredraw 

如果这不能解决您的问题,请尝试启动vim而不使用您的vimrc,以确保没有您当前的设置正在搞砸它。

 vim -u NONE 

有两件事情将极大地帮助加速Ruby语法突出显示,禁用Ruby的游标行和相对数(如果使用的话)。

我在.vimrc中有以下内容:

 " Ruby is an oddball in the family, use special spacing/rules if v:version >= 703 " Note: Relative number is quite slow with Ruby, so is cursorline autocmd FileType ruby setlocal ts=2 sts=2 sw=2 norelativenumber nocursorline else autocmd FileType ruby setlocal ts=2 sts=2 sw=2 endif 

尝试在vimrc中明确地设置你的rubypath:

 let g:ruby_path="/usr/bin/ruby" 

我使用vim 7.4.52,这些解决scheme都不适合我。

根据这个github在这个问题上的评论( https://github.com/vim/vim/issues/282#issuecomment-169837021),foldmethod foldmethod=syntax负责缓慢。

添加到我的.vimrc最终修复它!

 augroup ft_rb au! " fix the SLOOOW syntax highlighting au FileType ruby setlocal re=1 foldmethod=manual augroup END 

请参阅底部的更新。

这可能有助于解决方法 –

我正在使用vim版本

VIM – Vi改进7.4(2013年8月10日,编译2014年1月2日19时40分46秒)

包含的补丁:1-52

它是从Linux Mint 17.1丽贝卡的股票版本。

php.vim语法文件不是我可以看到的版本,但是它最后编辑了28 Aug 13。

这不是一个ruby项目,但是当编辑一个大的PHP类文件(

  $ php -w test.inc | wc 2 2410 19220 

)我注意到在class级顶部附近有明显的延误,但不在class级之上或之下,特别是不在class级底部。 因为我试图在类的底部附近插入新的文本,延迟是最小的,似乎与class级内的行号成正比。 “最小”几乎是即时的,“显着”意味着每个字符1到1.5秒。

该文件是大约1800行,约500行的合法php和1300行的评论和文档。 课程大约从30开始,到1700年左右结束。它被认为有点大,但有很好的文档logging:

如果我插入

  class dummy { } 

在原来的“class originalName {”的前面,文件中没有任何延迟。 这个难看的kluge允许vim / gvim重新获得响应,可以被认为是一种解决方法。 注意两者之间没有换行,只是

  class dummy { } class originalName { 

它甚至可以被评论:

  /*class dummy {}*/class originalName { 

附加信息:

  1. 在这个testing中,插件目录被移动了。

  2. 与“设置语法=关”,问题完全消失。 这不是一个修复。

  3. 用正则expression式引擎设置

     set regexpengine=1 (or any other number) 

    不会明显改变结果。

基于这些结果,我会怀疑正则expression式引擎。 我的观点是用ruby文件中的语法做了一些操作可能会导致解决方法。

更新:我发现问题是由“设置php_folding为1(启用)”造成的。 我以前使用的vimrc不是,但是至less有一些神秘的东西因为这个错误而被解决了。 一个简单的vimrc会导致这个问题(至less对我来说):

  :syntax enable :let php_folding = 1 

这意味着我的问题与ruby问题完全无关,但ruby.vim文件可能会有类似的情况。 也许不会。

道歉的偏转。

我尝试了大部分这些解决scheme,但是最后为我工作的最好方法就是删除与航空公司相关的任何插件。