【问题标题】:How to see which plugins are making Vim slow?如何查看哪些插件使 Vim 变慢?
【发布时间】:2012-08-26 04:02:33
【问题描述】:

有没有办法分析 Vim 插件?

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

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

【问题讨论】:

  • 其实启动没问题。 Vim 使用几分钟后变慢。它特别关注.py 文件。
  • 二分搜索要走的路。您在 2 小时前问过您的问题,您的问题的原因会在那个时候找到。 Ingo Karkat 的 autocmd 预感对我来说听起来最合理。
  • 确实如此 - 但您不认为如果有办法在一小时内获得相同的结果,那会更好吗?更何况启动还好,用了几分钟就可以了,所以要花很长的时间。 autocmd 看起来很酷。刚试了一下,Vim 现在不慢了。
  • 刚遇到同样的问题,但在大红宝石文件上。发现folding=syntax可以减速。尝试使用folding=manual,现在一切正常

标签: debugging optimization vim macvim


【解决方案1】:

一个非常简单的解决方案:找到一个慢速命令。将一个插件移至/tmp/。再次尝试该命令。如果仍然很慢,请将另一个插件移至/tmp/。重复,直到找到使命令变慢的插件。

【讨论】:

    【解决方案2】:

    如果您遇到屏幕更新操作(^L、滚动等)缓慢的问题,您的问题可能是语法高亮文件效率低下。您可以通过暂时禁用语法高亮 (:syn off) 并查看问题是否消失来对此进行测试;如果您想深入了解细节,可以使用:syntime 分析当前语法文件:

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

    【讨论】:

    • 如果看起来语法高亮文件是罪魁祸首,那么下一步的行动是什么?
    【解决方案3】:

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

    vim --startuptime timeCost.txt timeCost.txt
    

    请运行:

    :help --startuptime
    

    在 VIM 中获取更多信息。

    【讨论】:

    • 以防万一其他人想知道,这并不存在于所有 vim/gvim 发行版中。没有库存 Win Gvim 7.4 在这里(尽管它记录在 viminfo 中)
    • @thynctank 我在我的 gvim 7.4 上试过,它工作。这是我的版本IM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
    • 最佳答案!帮助我确定了每次启动 vim 时让我生气的最慢插件。谢谢:)
    • 这个和基本的-V 表明这是一个非本地$HOME 导致问题
    • 需要执行:e刷新文件。根据每个操作所花费的总时间对文件进行排序,如:%! sort -k2 -nr
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 这太棒了。我能够看到 EasyTags 是罪魁祸首。非常感谢!
    • 这帮助我将“vim-gitgutter”检测为堵塞物。
    • @subjectego :set more | verbose function {function_name} 将向您显示函数内容及其所在位置。
    • 如果不清楚,生成的 profile.log 是 Vim 会话当前目录中的一个文件。
    • 跳到profile.log的末尾查看按总时间排序的函数列表(profile.log对我来说似乎没用,直到我发现它末尾有一个排序列表)。跨度>
    【解决方案5】:

    可能是插件或语法高亮;发生这种情况时试试:syntax off,看看 Vim 是否会立即变得更快。

    对于插件,“一般的缓慢”通常来自自动命令; :autocmd 将它们全部列出。通过:autocmd! [group] {event} 杀死其中一些人进行调查。从更频繁的事件(例如CursorMoved[I])继续到不太频繁的事件(例如BufWinEnter)。

    如果您可以稍微可靠地重现缓慢,二分查找可能会有所帮助:移开 ~/.vim/plugin/ 中的一半文件,然后在另一组中重复缓慢的文件。

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

    【讨论】:

      【解决方案6】:

      我发现使用 -V 选项启动 Vim 将所有 Vim 活动打印到文件很有帮助:

      vim -V12log
      

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

      【讨论】:

      • 但是日志上没有计时
      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2015-09-28
      • 2011-06-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多