67

我爱维姆。但它现在让我很难过。

我使用了很多插件,在过去的 6 个月里,我发现了很多很棒的插件。但是我的 Vim 也变得非常迟钝。我经常清理,但没有多大帮助。

我正处于 Vim 完全无法使用的地步。感觉它以每秒 2-5 帧的速度呈现,切换选项卡/缓冲区大约需要一秒钟,滚动hjkl非常糟糕,延迟非常糟糕,即使在插入模式下输入句子也会令人困惑(由于延迟)。

编辑:实际上,当我打开新的 Vim 实例时,它还可以,但在 15 分钟内它变得无法使用。

我刚刚花了 4 个小时试图找出导致痛苦的插件或配置。我没有成功。

但是,我确实发现,删除此设置会导致所有延迟消失: syntax on

这 3 行与语法一起使一切变得更糟。

set t_Co=256
set background=dark
colorscheme candyman

有趣的。那么,语法高亮正在让 Vim 从超级敏捷变得异常缓慢?

我尝试在“干净”模式下启用语法: vim -u NONE

这不是问题。

所以似乎问题在于语法突出显示与我的一个或多个插件相结合。我尝试禁用一堆,没有运气。

有什么方法可以进行分析吗?手动测试让我筋疲力尽。

有没有人有类似的经历?也许快速浏览一下我的.vimrc,看看是否有什么铃声响起。 https://bitbucket.org/furion/dotfiles

解决方案: 导致混乱的插件是:

Bundle "gorodinskiy/vim-coloresque.git"

我建议阅读答案,很好的见解。

编辑(1 个月后): coloresque 插件有了一些改进。

4

11 回答 11

100

编辑:博客上关于这一切是如何工作的,有截图和真棒酱。

https://eduncan911.com/software/fix-slow-scrolling-in-vim-and-neovim.html

下面的原始答案...


:syntime on

在你的 ruby​​ 文件中移动,然后

:syntime report

它为我报告了以下最慢的匹配,您可以看到甚至没有 1 个匹配。

我在 ruby​​.vim 文件中禁用了 ruby​​PredefinedConstant 并解决了问题。Vim 正则表达式引擎不喜欢 ruby​​ 语法高亮正则表达式中的某些内容。您必须在足够的语法高亮和良好的性能之间找到平衡。

希望对您有所帮助,这是在我的 Mac OS 10.8.5、自制 Vim 7.4(控制台 vim)上报告的 ruby​​ 的前 3 个最慢的语法高亮正则表达式

    TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  3.498505   12494  0       0.008359    0.000280  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!
  2.948513   12494  0       0.006798    0.000236  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!
  2.438253   12494  0       0.005346    0.000195  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!

或者您可以vim-ruby按照 Dojosto 指出的那样尝试

于 2013-12-11T12:44:49.200 回答
30

你有autocmd垃圾邮件。您应该将所有 autocmd 语句包装在组中,以便在重新添加 autocmd 之前清除该组。看起来您.vimrc的大多数 autocmds 都被注释掉了,所以也许有一个插件导致了这个问题。检查此命令的输出:

:au CursorMoved

如果那里有一堆重复的处理程序,那就是你的问题。

这是我的 .vimrc中的 autocmd 规则示例:

augroup vimrc_autocmd
  autocmd!
  "toggle quickfix window
  autocmd BufReadPost quickfix map <buffer> <leader>qq :cclose<cr>|map <buffer> <c-p> <up>|map <buffer> <c-n> <down>

  autocmd FileType unite call s:unite_settings()
  " obliterate unite buffers (marks especially).
  autocmd BufLeave \[unite\]* if "nofile" ==# &buftype | setlocal bufhidden=wipe | endif

  " Jump to the last position when reopening a file
  autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif

  " ...etc...

augroup END

在重新添加自动命令之前,块autocmd!开头的augroup清除当前组(在这种情况下)。vimrc_autocmd

于 2013-09-26T14:38:49.100 回答
29

另一个堆栈溢出问题,我通过在 .vimrc 文件中添加以下行来快速获得 vim:
set re=1
这将强制 vim 使用旧版本的正则表达式引擎,它实际上对于 ruby​​ 更快。

于 2014-08-13T00:50:29.553 回答
16

我发现“set foldmethod=syntax”使 7.4 几乎无法使用,例如对于 js&ruby 文件(ubuntu 13.10),而“set foldmethod=indent”工作正常。

于 2013-11-07T06:57:20.913 回答
15

我注意到如果你使用任何动态改变背景颜色的东西,vim 可能会减速到停止。尝试关闭:set cursorline:set cursorcolumn(如果您设置了它们)。

于 2014-02-25T19:08:42.093 回答
8

我要感谢所有在这个问题上帮助我的人。好消息是,我的 Vim 又活泼了。

我已经开始重新安装 Vim。我已经一个接一个地添加了插件,直到我找到了万恶之源。

Bundle "gorodinskiy/vim-coloresque.git"

它是一个让我痛苦的插件。由于我有一段时间,它不是嫌疑人,这就是为什么我这么晚才发现它的原因。这个插件的作用是,每当它找到一个颜色词(例如红色、绿色)或十六进制值(例如#FFFFFF)时,它都会设置文本的背景颜色以匹配其描述的颜色。好主意,但执行起来似乎很糟糕。

删除此插件消除了滞后。

但我并没有止步于此。我也对我的 .vimrc 进行了重大清理。删除了一些我没有使用过的插件。将我的 s 分组autocmd并删除不必要的。

我的 Vim 现在非常活泼。我又开心了。

于 2013-09-26T15:34:39.230 回答
5

语法高亮可能会很慢,但这应该仅限于某些(有些病态的)文件和特定的语法。最新的 Vim 7.4 有一个新命令:syntime来解决语法突出显示缓慢的问题。

除此之外,通常,您禁用一半插件的二进制搜索,然后只有一半(当问题仍然存在时)或另一半(当问题消失时)让您快速找到有问题的脚本.

于 2013-09-26T14:44:03.107 回答
4

我很确定

set t_Co=256
set background=dark
colorscheme candyman

与那个滞后无关。前两行是无用的(可用颜色的数量是根据你$TERM和你的配色方案定义的set background=dark)但不是真的有害。

常见的“Vim 正在缓慢爬行”的原因包括 s 写得不好、autocmds 太多autocmd、重新加载的~/.vimrc太频繁、插件写得不好……</p>

请发布您的设置,以便我们帮助您找出您遇到这种延迟的原因。

于 2013-09-26T14:26:13.700 回答
4

我有这个问题很长时间了,这让我发疯了。我尝试安装vim-ruby。不确定这是否有帮助,但至少现在我拥有最新版本的 ruby​​ 语法突出显示(自上一版 Vim 发布以来性能有所改进)。

但后来我进一步看,发现 vim-ruby 有一种模式可以跳过所有昂贵的突出显示。尝试将此行添加到您的 vimrc 中,看看它是否有帮助(它对我有用,终于!):

let ruby_no_expensive=1

于 2015-12-08T10:07:19.567 回答
1

对我来说,set relativenumber这是减慢速度的功能。尝试禁用它set norelativenumber并进行测试。

于 2018-01-11T22:06:24.650 回答
1

以防万一它可以帮助那里的任何人:

我不小心为我的项目创建了一个非常大的标签文件;所以我的语法荧光笔正在搜索大文件以突出显示函数名称。

所以检查你的标签文件!(在我的设置中,我使用的是easy-tags,所以我的放置在~/.vimtags

于 2021-06-13T00:10:20.917 回答