分析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文件输出中并不明显(但很重要)。
你会得到这样的结果图:
随着这样的文字输出:
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,
- 运行几次执行分析得到平均值/标准差 ,
- 支持vim和neovim ,
- 可以使用完整的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 =====================================
如果你从.vimrc文件加载你的插件,你可以做的是把q
放在文件的某一行,让它退出,这样你就可以使用一个进程计时器,比如说unix time
命令。 更彻底的,这看起来像:
- 备份现有的
.vimrc
文件 - 注释掉除了一定数量的插件外的所有内容
- 插入一个
q
行 - 通话
time vim
重复和平均 - 恢复备份
这不是优雅,但我认为它会完成工作。
跟踪打开特定文件时的 – 开始时间可能很方便
gvim app/views/layouts/application.html.erb --startuptime time.log
有一个插件来描述vim的启动时间。
是不是有一个可以像这样使用bash time
命令:
time vim
编辑 :不包括脚本启动时间。 改用@jamessanbuild议。