Vim慢速,带ruby语法高亮显示
我已经使用vim over ssh工作了一两周,一切都很顺利。今天我决定添加一些语法突出显示、自动完成和其他一些通用插件。设置vundle并开始工作 我当前的.vimrc可以在 我已经将我的vimrc和vim文件克隆到我本地的ubuntu桌面上,vim完全按照预期运行,在我能找到的任何文件上都不慢。相同的插件和相同的vimrc,ruby文件上没有速度慢 更新 我可以用下面的方法重现这个问题Vim慢速,带ruby语法高亮显示,ruby,vim,Ruby,Vim,我已经使用vim over ssh工作了一两周,一切都很顺利。今天我决定添加一些语法突出显示、自动完成和其他一些通用插件。设置vundle并开始工作 我当前的.vimrc可以在 我已经将我的vimrc和vim文件克隆到我本地的ubuntu桌面上,vim完全按照预期运行,在我能找到的任何文件上都不慢。相同的插件和相同的vimrc,ruby文件上没有速度慢 更新 我可以用下面的方法重现这个问题 syntax on 和一个空的~/.vim文件夹 但是,使用ruby/haml文件时,此vps上的vim
syntax on
和一个空的~/.vim
文件夹
但是,使用ruby/haml文件时,此vps上的vim速度非常慢。更多的是ruby文件。当我打开任何ruby文件时,启动大约需要2秒钟(用--startuptime计时)。对于长度相当的haml文件,大约需要0.5秒。这种缓慢也不仅仅是在启动时,移动和编辑文件都非常缓慢
Haml/erb(基本相同)
红宝石
在相同的ruby文件上没有语法高亮显示
149.047 000.004: before starting main loop
152.912 003.865: first screen update
我尝试过使用mosh(),但没有任何帮助。不太相关了
正如您在我的.vimrc文件中所看到的,我尝试了一些不同的解决方案来解决这个问题。
我尝试过在禁用所有插件的情况下运行(我将它们从~/vim/bundle/PLUGINNAME
移动到~/vim/bundle/disabled/PLUGINNAME
,是否正确?),设置ruby路径,将foldlevel设置为手动,禁用我的配色方案,没有任何帮助见编辑3
如果有帮助,我可以发布任何文件的完整StartupTime日志。我已经测试了一些其他语言(php、c、python、vimL),但没有一种语言的速度减慢
编辑:我只是想澄清一下,我正在使用ssh运行ssh会话user@server然后在服务器内部执行vim file.rb EDIT2:我刚刚尝试直接访问服务器,但是没有ssh时速度仍然很慢,我已经更新以反映ssh没有问题 EDIT3:我可以用一个.vimrc文件重现该问题,该文件包含一行
语法,并且带有一个空的~/.vim文件夹
EDIT4我卸载了我编译的vim版本以及通过apt安装的任何版本,手动从我的系统中删除了所有vim内容,我可以使用vim-u NONE/path/to/file.rb运行vim,然后打开do:syn,问题就会出现。所讨论的文件是rails控制器,但正如我所说,我可以用大多数文件在某种程度上重新创建它,但rails控制器看起来是最糟糕的。您应该在vimrc中设置此tw选项:
set ttyfast
set lazyredraw
let g:ruby_path="/usr/bin/ruby"
如果这不能解决您的问题,请尝试在没有vimrc的情况下启动vim,以确保当前设置没有任何问题
vim -u NONE
尝试在vimrc中显式设置ruby路径:
set ttyfast
set lazyredraw
let g:ruby_path="/usr/bin/ruby"
这个问题的解决方案是vim使用的正则表达式引擎。
关于freenode上的#vim的猜测是ruby语法文件使用的东西在新的正则表达式引擎上要慢一些
任何早于Vim 7.3.969(含Vim 7.3.969)的版本都有旧的正则表达式引擎。
将set re=1
添加到您的vimrc
中,以强制将旧的正则表达式引擎加载到任何更新的版本上(并且不要忘记重新加载您当前正在使用:e
编辑的文件)
多亏了维姆公司的Houl、Dolio和dmedvinsky的帮助
我还没有机会尝试绝对最新的版本,昨晚有一次提交可能会帮助解决这个问题。如果我有机会再次尝试最新版本,我将更新此版本。有两件事将大大有助于加快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
我尝试了这些解决方案中的大多数,但最适合我的是删除与航空公司相关的任何插件。请参阅底部的更新
这可能有助于解决问题-
我使用的是vim版本
VIM-Vi提高了7.4(2013年8月10日,2014年1月2日汇编19:40:46)
附带补丁:1-52
它是来自
LinuxMint17.1Rebecca
我看不到php.vim语法文件的版本,但它上一次编辑是在2013年8月28日
它不是ruby项目,但在编辑大型php类文件时(
)我注意到明显的延迟发生在班级的顶端,但不是在班级的上方或下方,尤其是在班级的底部。当我尝试在类底部附近插入新文本时,延迟是最小的,并且似乎与类内的行号成比例。“最小”表示几乎立即,“重要”表示每个字符1到1.5秒
该文件大约有1800行,包含大约500行合法php和1300行注释和文档。课程开始于大约第30行,结束于大约第1700行。承认它有点大,但有很好的记录:-\
如果我插入
class dummy { }
在原始“类原始名称{”前面,
文件中的任何地方都没有延迟。这个难看的kluge允许vim/gvim恢复其响应能力,可以被视为一种解决方法。请注意,两者之间没有换行,只是
class dummy { } class originalName {
它甚至可以被注释掉:
/*class dummy {}*/class originalName {
其他信息:
在此测试期间,插件目录被移动
使用“set syntax=off”时,问题完全消失。这不是修复方法
将正则表达式引擎设置为
set regexpengine=1 (or any other number)
不会明显改变结果
基于这些结果,我也会怀疑正则表达式引擎。我的观点是,稍微篡改一下ruby文件中的语法可能会导致一种解决方法
更新:
我发现这个问题是由于将php_folding设置为1(启用)引起的
set regexpengine=1 (or any other number)
:syntax enable
:let php_folding = 1
augroup ft_rb
au!
" fix the SLOOOW syntax highlighting
au FileType ruby setlocal re=1 foldmethod=manual
augroup END