我一直在使用vim over ssh工作一两个星期,一切都很顺利。今天我决定添加一些语法高亮,自动完成和其他一些通用插件。设置vundle并去上班。
我当前的.vimrc可以在https://github.com/scottopell/dotfiles/blob/master/.vimrc
我已经将我的vimrc和vim文件克隆到我的本地ubuntu桌面上,vim运行完全符合预期,我找不到的任何文件都没有慢。相同的插件和相同的vimrc,并且在ruby文件上没有慢。
更新
我可以使用以下.vimrc
重现此问题syntax on
和一个空的~/.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
红宝石
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文件中看到的,我尝试了一些不同的解决方案来解决这个问题。
我已经尝试禁用所有插件运行(我将它们全部从~/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的问题。
EDIT3:我可以使用.vimrc文件重现此问题,该文件包含带有空〜/ .vim文件夹的单行syntax on
EDIT4 我卸载了我编译的vim版本以及我可能通过apt安装的任何版本,手动删除了我系统中的所有vim内容,然后我可以使用vim -u NONE /path/to/file.rb
运行vim do:syn on,问题就在那里。有问题的文件是一个rails控制器,但就像我说的那样,我可以在某种程度上用大多数文件重新创建它,但是rails控制器看起来是最差的。
答案 0 :(得分:97)
这个问题的解决方案被证明是vim使用的正则表达式引擎。 关于freenode上#vim的推测是ruby语法文件在新的正则表达式引擎上使用的速度较慢。
任何早于Vim 7.3.969的版本都有旧的正则表达式引擎。
将set re=1
添加到vimrc
以强制旧版正则表达式引擎更新版本(并且不要忘记重新加载当前正在使用:e
编辑的文件)。
感谢来自#vim的Houl,Dolio和dmedvinsky寻求帮助。
我没有机会尝试绝对最新版本,昨晚有一个提交可能有助于解决这个问题。如果我有机会再次尝试最新版本,我会更新这个。
答案 1 :(得分:16)
您应该在vimrc中设置这两个选项:
set ttyfast
set lazyredraw
如果这不能解决您的问题,请尝试在没有vimrc的情况下启动vim,以确保没有任何当前设置将其搞砸。
vim -u NONE
答案 2 :(得分:12)
有助于加快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
答案 3 :(得分:6)
尝试在vimrc中明确设置ruby路径:
let g:ruby_path="/usr/bin/ruby"
答案 4 :(得分:6)
我正在使用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
答案 5 :(得分:1)
见底部的更新。
这可能有助于解决方法 -
我使用的是vim版本
VIM - Vi IMproved 7.4(2013年8月10日,2014年1月2日19:40:46编译)
包含的补丁:1-52
是来自的股票版本 Linux Mint 17.1 Rebecca。
php.vim语法文件不是我能看到的版本,但是它最后一次编辑' d 28 aug 13。
它不是一个ruby项目,但在编辑一个大的php类文件时(
$ php -w test.inc | wc
2 2410 19220
)我注意到课程顶部附近的重大延迟,但不高于或低于班级,并且值得注意的是,不是在班级的最低点。当我试图在类的底部附近插入新文本时,延迟是最小的,并且似乎与类内的行号成比例。 "最小"意味着几乎立即,"重要"表示每个字符1到1.5秒。
该文件大约1800行,约500行合法php和1300行评论和文档。该课程从约30行开始,到1700年左右结束。有人承认它有点大,但有充分记录: - \
如果我插入
class dummy { }
在原版"类原始名称前面{", 文件中的任何地方都没有延迟。这个难看的kluge允许vim / gvim重新获得响应,可以被认为是一种解决方法。注意两者之间没有换行,只是
class dummy { } class originalName {
它甚至可以评论出来:
/*class dummy {}*/class originalName {
其他信息:
在此测试期间,插件目录已移动。
使用"设置syntax = off",问题完全消失。这不是解决办法。
使用
设置正则表达式引擎set regexpengine=1 (or any other number)
没有明显改变结果。
根据这些结果,我会怀疑正则表达式引擎。我的观点是,使用ruby文件中的语法进行一些处理可能会导致解决方法。
更新: 我发现这个问题已经引发了#34;通过将php_folding设置为1(启用)。我正在使用的那个vimrc不是,但至少有一些神秘因为那个错误而被解决了。像这样的简单vimrc会导致问题(对我来说,至少):
:syntax enable
:let php_folding = 1
这意味着我的问题与ruby问题完全无关,但ruby.vim文件可能会发生类似的事情。也许不是。
为偏转道歉。
答案 6 :(得分:0)
我尝试了大部分这些解决方案,但最终为我工作的最好的方法是删除与航空公司相关的所有插件。