如何查看哪些插件使Vim变慢?


318

有没有一种配置Vim插件的方法?

当我打开大盘时,我的MacVim变得越来越慢.py。我知道我可以取消选择所有插件,然后一个一个地重新选择,以检查哪个插件是罪魁祸首,但是有没有更快的方法?

我的dotvim在这里:https : //github.com/charlax/dotvim



1
实际上,启动很好。使用几分钟后,Vim变慢。它尤其涉及.py文件。
charlax 2012年

二进制搜索必经之路。您在2个小时前提出了您的问题,那么在该时间便已找到了问题的原因。Ingo Karkat的autocmd直觉对我来说似乎是最合理的。
romainl

是的,但是您不认为如果有办法在一个小时内获得相同的结果,那更好吗?而且,启动还不错,因为它需要使用几分钟,所以要花很长时间。autocmd看起来很酷。刚刚尝试过,但是Vim现在并不慢。
charlax 2012年

1
只是面临相同的问题,但在大红宝石文件上。发现folding=syntax会变慢。经过尝试,folding=manual现在一切正常
Aleksandr K.

Answers:


496

您可以使用内置的分析支持:启动vim之后

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(与退出noautocmd并不是真正需要的,它只是使vim退出更快)。

注意:在vim退出之前,您不会获得有关已删除功能的信息。


13
这真太了不起了。我能够看到EasyTags是罪魁祸首。非常感谢!
charlax 2012年

5
这帮助我检测到“ vim-gitgutter”作为木log。
塞巴斯蒂安·格里戈诺利

6
@subjectego :set more | verbose function {function_name}将向您显示函数内容及其位置。
ZyX

26
如果不清楚,则结果profile.log是Vim会话的当前目录中的文件。
米卡·史密斯,

7
跳到的末尾profile.log以查看按总时间排序的函数列表(profile.log在我发现末尾有排序列表之前,对我来说似乎没用)。
安德烈·波特诺伊,

78

我发现了另一个非常有用的vim内置方法,可以在加载.vimrc时显示准确的计时消息。

vim --startuptime timeCost.txt timeCost.txt

请运行:

:help --startuptime

在VIM中获取更多信息。


3
以防万一其他人想知道,并非在所有vim / gvim发行版中都存在。不会在此处赢得股票Gvim 7.4(尽管在viminfo中有记录)
thynctank

1
@thynctank我尝试了我的gvim 7.4,它起作用了。这是我的版本IM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu 2014年

最佳答案!帮助我找出最慢的插件,这使我在每次vim启动时都很生气。Thanx :)
kovpack '16

基本情况-V表明,这是由非本地原因$HOME引起的
bsb

您需要执行:e以刷新文件。像这样每次操作所花费的总时间将文件排序到位:%! sort -k2 -nr
Ashutosh Jindal

31

它可以是插件,也可以是语法突出显示;尝试:syntax off在发生这种情况时尝试一下,看看Vim是否立即变快。

使用插件时,“一般缓慢”通常来自自动命令。一个:autocmd列出他们所有。通过杀死其中的一些人进行调查:autocmd! [group] {event}。从频率较高的事件(即CursorMoved[I])转到频率较低的事件(例如BufWinEnter)。

如果您可以一定程度地可靠地重现缓慢的情况,则二进制搜索可能会有所帮助:将中的文件中的一半移开~/.vim/plugin/,然后将另一半移出缓慢的文件集。

如果您确实需要深入了解,请获取已:profile启用命令的Vim版本。(不是普通的BIG Windows版本,但是Cygwin附带的版本;而且,在大多数发行版中,自编译都非常容易。)


17

我发现通过使用以下-V选项启动Vim将所有Vim活动打印到文件中是有帮助的:

vim -V12log

这将提供最大的详细程度(级别12)并将其输出到file log。然后,您可以执行一些您知道很慢的Vim动作,然后查看内部调用了哪些函数/映射。


10
但日志上没有时间
Kokizzu 2013年

7

如果您在屏幕更新操作(^L,滚动等)缓慢方面遇到问题,则可能是语法突出显示文件效率低下。您可以通过暂时禁用语法突出显示(:syn off)并查看问题是否消失来进行测试。如果要深入研究细节,可以使用:syntime以下命令来分析当前语法文件:

  1. 打开一个文件,该文件导致语法突出显示性能问题。
  2. 运行:syntime on以开始分析。
  3. 滚动浏览一下文件。
  4. 运行:syntime report以生成报告。报告中最先列出的模式是处理时间最多的模式。

2
如果看起来语法突出显示文件是罪魁祸首,那么下一步的行动是什么?
Spectator6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.