分析Vim的启动时间

使用Vim时,我已经有很多插件了 – 我已经收集了多年的插件。 我有点厌倦了Vim现在需要多长时间才能开始,所以我想介绍一下它的启动,看看我拥有的插件中有哪些是负责任的。

有什么办法来configurationVim的启动或脚本运行吗? 理想情况下,我想知道Vim花了多长时间加载每个Vim脚本。

如果您使用Vim 7.2.269或更高版本,那么可以使用–startuptime选项。

vim --startuptime vim.log 

从帮助( vim -h ):

 --startuptime <file> Write startup timing messages to <file> 

你可以使用vim自己的分析机制:

 vim --cmd 'profile start profile.log' \ --cmd 'profile func *' \ --cmd 'profile file *' \ -c 'profdel func *' \ -c 'profdel file *' \ -c 'qa!' 

运行上面的命令后,您将在当前目录中find一个名为profile.log的文件,其中包含所有必需的信息。 要获得每个脚本信息表类似于已经存在的每个函数,使用(在vim中打开这个文件之后):

 " Open profile.log file in vim first let timings=[] g/^SCRIPT/call add(timings, [getline('.')[len('SCRIPT '):], matchstr(getline(line('.')+1), '^Sourced \zs\d\+')]+map(getline(line('.')+2, line('.')+3), 'matchstr(v:val, ''\d\+\.\d\+$'')')) enew call setline('.', ['count total (s) self (s) script']+map(copy(timings), 'printf("%5u %9s %8s %s", v:val[1], v:val[2], v:val[3], v:val[0])')) 

它将被sorting,但是如果脚本数量太大,您可以使用内置的:sort命令。

我创build了这个 Github项目,以便更好地回答你的问题。 基本上,它总结了每个函数调用每个插件的时间,这从原始vimconfiguration文件输出中并不明显(但很重要)。

你会得到这样的结果图:

vim插件配置文件图

随着这样的文字输出:

 Generating vim startup profile... Parsing vim startup profile... Crunching data and generating profile plot ... Your plugins startup profile graph is saved as `profile.png` under current directory. ========================================== Top 10 Plugins That Slows Down Vim Startup ========================================== 1 105.13 "vim-colorschemes" 2 42.661 "vim-easytags" 3 31.173 "vim-vendetta" 4 22.02 "syntastic" 5 13.362 "vim-online-thesaurus" 6 7.888 "vim-easymotion" 7 6.931 "vim-airline" 8 6.608 "YankRing.vim" 9 5.266 "nerdcommenter" 10 5.017 "delimitMate" ========================================== Done! 

您可以运行vim -V ,通过添加时间戳并分析输出的实用程序来pipe理输出。 这个命令行是这样做的,例如:

 vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog 

您可能需要盲目input:q以回到您的提示。 之后,您应该在当前目录中find文件vilog ,并在每行的开始处雇用timestamps。

如果你可以做到一秒的粒度,你可以这样做:

 vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog 

我通过innaM对vim -V 解决scheme进行了改进,以显示delta时间:

 vim -V 2>&1 | perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog 

基于依赖于R的@hyiltiz完成的工作,我制作了一个Python版本的分析器,因为在R系统上更常用。

它也稍微容易延伸,因此这些特征是:

  • 自动检测插件文件夹,
  • 条形图感谢matplotlib,
  • 运行几次执行分析得到平均值/标准差
  • 支持vimneovim
  • 可以使用完整的vim命令来testing延迟加载function,打开具有特定文件types的文件等,
  • 将结果导出到一个csv文件。

输出与vim-plugins-profile提供的相似:

 $ vim-profiler.py -p nvim Running nvim to generate startup logs... done. Loading and processing logs... done. Plugin directory: /home/user/.config/nvim/plugged ===================================== Top 10 plugins slowing nvim's startup ===================================== 1 3.326 vim-fugitive 2 2.936 tcomment_vim 3 2.315 vim-hybrid 4 1.751 lightline.vim 5 0.959 vim-sneak 6 0.943 supertab 7 0.542 vim-surround 8 0.536 fzf.vim 9 0.450 fzf 10 0.434 auto-pairs ===================================== 

VIM-分析器

如果你从.vimrc文件加载你的插件,你可以做的是把q放在文件的某一行,让它退出,这样你就可以使用一个进程计时器,比如说unix time命令。 更彻底的,这看起来像:

  1. 备份现有的.vimrc文件
  2. 注释掉除了一定数量的插件外的所有内容
  3. 插入一个q
  4. 通话time vim重复和平均
  5. 恢复备份

这不是优雅,但我认为它会完成工作。

跟踪打开特定文件时的 – 开始时间可能很方便

 gvim app/views/layouts/application.html.erb --startuptime time.log 

有一个插件来描述vim的启动时间。

http://www.vim.org/scripts/script.php?script_id=2915

是不是有一个可以像这样使用bash time命令:

 time vim 

编辑 :不包括脚本启动时间。 改用@jamessanbuild议。