45

我已经在 ssh 上使用 vim 工作了一两个星期了,一切都很顺利。今天我决定添加一些语法高亮、自动完成和其他一些通用插件。设置vundle并开始工作。

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

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

更新

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

syntax on

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

但是,这个 vps 上的 vim 对于 ruby​​/haml 文件非常慢。更多的红宝石文件。当我打开任何 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 设置为手动,禁用我的颜色方案,没有任何帮助。 见编辑3

如果有帮助,我可以发布任何文件的完整启动时间日志。
我已经测试了其他几种语言(php、c、python、vimL)并且没有遇到任何减速。


编辑:澄清一下,我正在使用 ssh user@server 运行 ssh 会话,然后一旦进入服务器,我正在执行 vim file.rb。

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

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

EDIT4 我卸载了我编译的vim版本和我可能通过apt安装的任何版本,从我的系统中手动删除了所有vim的东西,我可以运行vimvim -u NONE /path/to/file.rb然后执行:syn,问题就会出现。有问题的文件是一个 rails 控制器,但就像我已经说过的,我可以在某种程度上用大多数文件重新创建它,但 rails 控制器看起来是最糟糕的。

4

7 回答 7

103

这个问题的解决方案原来是 vim 使用的正则表达式引擎。关于 freenode 上#vim 的猜测是 ruby​​ 语法文件在新的正则表达式引擎上使用了更慢的东西。

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

感谢来自#vim 的 Houl、Dolio 和 dmedvinsky 帮助解决这个问题。

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

于 2013-06-04T14:20:37.153 回答
16

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

set ttyfast
set lazyredraw

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

vim -u NONE
于 2013-06-03T18:08:45.187 回答
14

有两件事将极大地帮助加速 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
于 2015-03-25T22:48:13.587 回答
8

我正在使用 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
于 2016-07-27T14:48:04.390 回答
7

尝试在 vimrc 中明确设置 ruby​​ 路径:

let g:ruby_path="/usr/bin/ruby"
于 2013-06-03T20:26:13.453 回答
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 语法文件不是我可以看到的版本,但它最后一次编辑是 13 年 8 月 28 日。

它不是一个 ruby​​ 项目,但是在编辑一个大型 php 类文件时(

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

) 我注意到在班级顶部附近出现了明显的延误,但没有高于或低于班级,尤其是没有接近班级底部。当我尝试在班级底部附近插入新文本时,延迟很小,并且似乎与班级内的行号成正比。“最小”意味着几乎立即,“重要”意味着每个字符 1 到 1.5 秒。

该文件大约有 1800 行,其中包含大约 500 行合法的 php 和 1300 行的注释和文档。该课程从大约第 30 行开始,到大约第 1700 行结束。承认它有点大,但有据可查:-\

如果我插入

    class dummy { }

在原始的“class originalName {”前面,文件中没有任何延迟。这种难看的 kluge 允许 vim/gvim 恢复其响应能力,并且可以被认为是一种解决方法。注意两者之间没有换行,只是

    class dummy { } class originalName {

它甚至可以被注释掉:

    /*class dummy {}*/class originalName {

附加信息:

  1. 在此测试期间,插件目录被移动。

  2. 使用“set syntax=off”,问题就完全消失了。这不是解决办法。

  3. 设置正则表达式引擎

    set regexpengine=1   (or any other number)
    

    不会明显改变结果。

基于这些结果,我也会怀疑正则表达式引擎。我的观点是,在 ruby​​ 文件中使用一些语法可能会导致解决方法。

更新:我发现问题是通过将 php_folding 设置为 1(启用)“引起的”。我认为我使用的 vimrc 不是,但由于那个错误,至少一些谜团得到了解决。像这样的简单 vimrc 会引发问题(至少对我而言):

    :syntax enable
    :let php_folding = 1

这意味着我的问题与 ruby​​ 问题完全无关,但是 ruby​​.vim 文件可能会发生类似的事情。也许不吧。

为偏斜道歉。

于 2016-04-05T22:22:51.393 回答
0

我尝试了大多数这些解决方案,但最终对我最有效的是删除与航空公司相关的所有插件。

于 2016-02-11T20:24:08.433 回答