有没有办法分析 Vim 插件?
当我打开一个大的 .py
时,我的 MacVim 变得越来越慢。我知道我可以取消选择所有插件并一一重新选择以检查哪个插件是罪魁祸首,但是有更快的方法吗?
我的 dotvim 在这里:https://github.com/charlax/dotvim
.py
文件。
autocmd
预感在我看来是最合理的。
autocmd
看起来很酷。刚刚尝试过,但 Vim 现在并不慢。
folding=syntax
可以放慢速度。尝试使用 folding=manual
,现在一切正常
您可以使用内置的分析支持:启动 vim 后
:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!
(不像真正需要退出 noautocmd
,它只是让 vim 退出更快)。
注意:你不会得到关于在 vim 退出之前删除的函数的信息。
我发现了另一种非常有用的 vim 内置方法,可以在加载 .vimrc 时显示准确的时间消息。
vim --startuptime timeCost.txt timeCost.txt
请运行:
:help --startuptime
在 VIM 中获取更多信息。
IM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
-V
表明它是导致问题的非本地 $HOME
:e
来刷新文件。根据每个操作所花费的总时间对文件进行排序,如下所示:%! sort -k2 -nr
它可以是插件或语法高亮;发生这种情况时尝试 :syntax off
看看 Vim 是否立即变得更快。
对于插件,“一般缓慢”通常来自自动命令; :autocmd
将它们全部列出。通过 :autocmd! [group] {event}
杀死其中一些进行调查。从更频繁的事件(即CursorMoved[I]
)继续到不太频繁的事件(例如BufWinEnter
)。
如果您可以在某种程度上可靠地重现缓慢,则二进制搜索可能会有所帮助:移开 ~/.vim/plugin/
中的一半文件,然后在另一组中重复缓慢的文件。
如果您确实需要深入了解,请获取启用了 :profile
命令的 Vim 版本。 (不是普通的 BIG Windows 版本,而是 Cygwin 附带的版本;此外,在大多数发行版下,自编译非常容易。)
我发现通过使用 -V
选项启动 Vim 将所有 Vim 活动打印到文件很有帮助:
vim -V12log
这提供了最大的详细程度(级别 12)并将其输出到文件 log
。然后您可以执行一些您知道很慢的 Vim 操作,然后查看内部调用了哪些函数/映射。
如果您遇到屏幕更新操作(^L
、滚动等)缓慢的问题,您的问题可能是语法高亮文件效率低下。您可以通过暂时禁用语法高亮 (:syn off
) 并查看问题是否消失来对此进行测试;如果您想深入了解细节,可以使用 :syntime
分析当前语法文件:
打开导致语法突出显示性能问题的文件。运行 :syntime on 开始分析。稍微滚动一下文件。运行 :syntime report 生成报告。报告中首先列出的模式是处理时间最长的模式。
一个非常简单的解决方案:找到一个慢速命令。将一个插件移至 /tmp/
。再次尝试该命令。如果仍然很慢,请将另一个插件移至 /tmp/
。重复,直到找到使命令变慢的插件。
:set more | verbose function {function_name}
将向您显示函数内容及其所在位置。profile.log
是 Vim 会话当前目录中的一个文件。profile.log
的末尾以查看按总时间排序的函数列表(在我发现末尾有一个排序列表之前,profile.log
对我来说似乎没用)。