有没有一种方法来分析 Vim 插件的性能表现?
当我打开一个大的.py
文件时,我的 MacVim 变得越来越慢。我知道我可以取消选择所有插件,然后逐个重新选择来确定是哪个插件导致了问题,但是否有更快的方法呢?
我的 dotvim 仓库在这里:https://github.com/charlax/dotvim
有没有一种方法来分析 Vim 插件的性能表现?
当我打开一个大的.py
文件时,我的 MacVim 变得越来越慢。我知道我可以取消选择所有插件,然后逐个重新选择来确定是哪个插件导致了问题,但是否有更快的方法呢?
我的 dotvim 仓库在这里:https://github.com/charlax/dotvim
你可以使用内置的性能分析支持:启动 vim 后执行以下操作:
:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!
(与退出noautocmd
不同,使用它并不是必须的,只是使vim更快地退出)。
注意:您将无法获取有关在vim退出之前被删除的函数的信息。
:set more | verbose function {function_name}
可以显示函数的内容及其所在位置。 - ZyXprofile.log
文件是在你当前Vim会话目录中的一个文件。 - Micah Smithprofile.log
的末尾以查看按总时间排序的函数列表(在我发现末尾有一个排序列表之前,profile.log
对我来说似乎毫无用处)。 - Andrey Portnoyvim --startuptime timeCost.txt timeCost.txt
请执行:
:help --startuptime
在VIM中获取更多信息。
IM - Vi IMproved 7.4 (2013年8月10日,编译于2013年8月10日14:33:40)
。 - feihu:e
命令来刷新文件。按照每个操作所花费的总时间对文件进行原地排序,命令如下::%! sort -k2 -nr
。 - Ashutosh Jindal当 Vim 出现插件或语法高亮问题时,可以尝试使用 :syntax off
命令,看看是否能够使 Vim 立即变得更快。
如果是由插件导致的“普遍缓慢”,通常是由于自动命令引起的。使用 :autocmd
命令可以列出所有自动命令。通过使用 :autocmd! [group] {event}
命令来逐个删除自动命令并进行调查。从更频繁的事件(例如 CursorMoved[I]
)开始,逐渐向不太频繁的事件(例如 BufWinEnter
)前进。
如果您可以在某种程度上可靠地重现缓慢的情况,则可以尝试二分搜索:将 ~/.vim/plugin/
目录中的文件分成两半,然后分别测试,重复操作直到找到导致缓慢的文件集合。
如果您确实需要深入了解,可以获取支持 :profile
命令的 Vim 版本。 (不是原版的 Windows 版本,但附带 Cygwin 的版本具有此功能;此外,在大多数发行版下进行自编译非常容易。)
我发现通过使用Vim的-V
选项将所有Vim操作打印到文件中很有帮助:
vim -V12log
这提供了最大的详细程度(级别12),并将其输出到文件log
。然后,您可以执行一些您知道很慢的Vim操作,然后查看内部调用哪些函数/映射。
如果您在屏幕更新操作(^L
,滚动等)方面遇到问题,可能是由于语法高亮文件效率低下所致。您可以通过暂时禁用语法高亮(:syn off
)来测试是否存在问题;如果您想深入了解细节,可以使用:syntime
对当前语法文件进行分析:
:syntime on
开始分析。:syntime report
生成报告。报告中排名靠前的模式是处理时间最长的模式。/tmp/
。再次尝试该命令。如果仍然很慢,请将另一个插件移动到/tmp/
。重复此过程,直到找到导致命令变慢的插件。
.py
文件。 - charlaxautocmd
猜测对我来说是最有可能的。 - romainlautocmd
看起来很酷。我刚试过了,但现在Vim并不慢。 - charlaxfolding=syntax
可能会减慢速度。尝试使用folding=manual
,现在一切正常。 - Aleksandr K.