Vim因ruby语法突出显示而变慢

Sco*_*ttO 42 ruby vim

我一直在使用vim over ssh工作一两个星期,一切都很顺利.今天我决定添加一些语法高亮,自动完成和其他一些通用插件.设置vundle并去上班.

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

我已将我的vimrc和vim文件克隆到我的本地ubuntu桌面上,vim运行完全符合预期,我找不到任何文件都没有慢.相同的插件和相同的vimrc,并且在ruby文件上没有慢.

更新

我可以使用以下.vimrc重现此问题

syntax on
Run Code Online (Sandbox Code Playgroud)

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

但是,使用ruby/haml文件时,此vps上的vim非常慢.更多的红宝石文件.当我打开任何ruby文件时,启动大约需要2秒钟(使用--startuptime计时).使用可比较长度的haml文件,大约0.5秒.这种缓慢不仅仅是在启动时,移动和编辑文件都非常缓慢.

Haml/erb(它们基本相同)

268.818  000.005: before starting main loop
848.871  580.053: first screen update
Run Code Online (Sandbox Code Playgroud)

红宝石

199.613  000.004: before starting main loop
2937.859  2738.246: first screen update
Run Code Online (Sandbox Code Playgroud)

没有语法突出显示在上面相同的ruby文件上

149.047  000.004: before starting main loop
152.912  003.865: first screen update 
Run Code Online (Sandbox Code Playgroud)

我尝试过使用mosh(http://mosh.mit.edu)并没有帮助. 不再那么相关了

正如您在我的.vimrc文件中看到的,我已经尝试了一些不同的解决方案来解决这个问题.我已经尝试禁用所有插件运行(我将它们全部移动~/vim/bundle/PLUGINNAME~/vim/bundle/disabled/PLUGINNAME,这是正确的吗?),设置ruby路径,将foldlevel设置为手动,禁用我的colorscheme,没有任何帮助. 见edit3

我可以发布任何文件的完整startupttime日志,如果这将有所帮助.
我已经测试了一些其他语言(php,c,python,vimL),没有经历任何减速.


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

EDIT2:我只是尝试直接访问服务器,并且缓慢持续没有ssh,我已经更新以反映这不是ssh的问题.

编辑3:我可以使用.vimrc文件重现该问题,该文件包含syntax on带有空〜/ .vim文件夹的单行

EDIT4 我卸载了我的编译版本的vim以及我可能通过apt安装的任何版本,手动删除了我系统中的所有vim内容,我可以运行vim vim -u NONE /path/to/file.rb然后执行:syn on,问题就在那里.有问题的文件是一个rails控制器,但就像我说的那样,我可以在某种程度上重新创建它与大多数文件,但轨道控制器看起来是最糟糕的.

Sco*_*ttO 98

这个问题的解决方案被证明是vim使用的正则表达式引擎.关于freenode上#vim的推测是ruby语法文件在新的正则表达式引擎上使用的速度较慢.

任何早于Vim 7.3.969的版本都有旧的正则表达式引擎.添加set re=1到您vimrc的强制旧版正则表达式引擎上的任何版本(并且不要忘记重新加载您当前正在编辑的文件:e).

感谢来自#vim的Houl,Dolio和dmedvinsky寻求帮助.

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

  • 使用`set re = 1`会让Vim对我来说更慢.还有其他建议吗? (7认同)
  • **重要说明**:为此,您必须*重新加载您当前正在编辑的文件(`:e`)! (7认同)

Den*_*ane 16

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

set ttyfast
set lazyredraw
Run Code Online (Sandbox Code Playgroud)

如果这不能解决您的问题,请尝试在没有vimrc的情况下启动vim,以确保当前没有任何设置正在将其搞砸.

vim -u NONE
Run Code Online (Sandbox Code Playgroud)


小智 13

有助于加快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
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 7

尝试在vimrc中显式设置ruby路径:

let g:ruby_path="/usr/bin/ruby"
Run Code Online (Sandbox Code Playgroud)

  • 这真的很有帮助.还因为我发现从配置文件中搜索Ruby路径需要花费2.4秒:1 2.426607 0.000126让g:ruby_default_path = s:query_path($ HOME) (2认同)

小智 7

我正在使用vim 7.4.52,这些解决方案都不适用于我.

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

将此添加到我的.vimrc终于修复了!

augroup ft_rb
    au!
    " fix the SLOOOW syntax highlighting
    au FileType ruby setlocal re=1 foldmethod=manual
augroup END
Run Code Online (Sandbox Code Playgroud)