使用Vim时我启用了很多插件 - 多年来我一直在收集插件。我有点厌倦了Vim现在开始的时间,所以我想介绍它的启动,看看我有多少插件负责。
有没有办法分析Vim的启动或脚本运行?理想情况下,我想知道Vim在它加载的每个Vim脚本中花了多长时间。
答案 0 :(得分:160)
如果您使用的是Vim 7.2.269或更高版本,则可以使用--startuptime选项。
vim --startuptime vim.log
来自帮助(vim -h
):
--startuptime <file> Write startup timing messages to <file>
答案 1 :(得分:37)
您可以使用vim自己的分析机制:
vim --cmd 'profile start profile.log' \
--cmd 'profile func *' \
--cmd 'profile file *' \
-c 'profdel func *' \
-c 'profdel file *' \
-c 'qa!'
运行上述内容后,您将在当前目录中找到名为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])'))
它将是未排序的,但如果脚本数量太大,您总是可以使用内置:sort
命令。
答案 2 :(得分:33)
我创建了this Github项目,以便更好地回答您的问题。基本上,它总结了每个插件的每个函数调用的时间,这对于原始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!
答案 3 :(得分:20)
您可以运行vim -V
,通过添加时间戳和分析输出的实用程序来管道输出。这个命令行就是这样做的,例如:
vim -V 2>&1 | perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog
您可能需要盲目输入:q 才能返回提示符。之后,您应该在当前目录中找到文件vilog
,并在每行的开头雇用时间戳。
如果您可以使用一秒钟的粒度,则可以执行以下操作:
vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog
答案 4 :(得分:16)
我通过innaM改进了vim -V solution以显示增量时间:
vim -V 2>&1 | perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
答案 5 :(得分:15)
基于@hyiltiz完成的依赖于R的工作,我创建了Python version的探查器,因为这在R的系统上更常见。
它也稍微容易扩展,因此功能如下:
输出类似于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
=====================================
答案 6 :(得分:5)
如果您正在从.vimrc文件加载插件,那么您可以做的是在文件的某些部分放置q
以使其退出,这样您就可以使用进程计时器,例如unix time
命令。更彻底的是,这看起来像:
.vimrc
文件q
行time vim
并平均这不优雅,但我认为它可以完成工作。
答案 7 :(得分:1)
有一个插件可以分析vim的启动时间。
答案 8 :(得分:1)
打开特定文件时跟踪--startime
可能很方便
gvim app/views/layouts/application.html.erb --startuptime time.log
答案 9 :(得分:0)
是否存在可以像这样使用的bash time
命令:
time vim
编辑:不包含脚本启动时间。请改用@jamessan建议。