分析Vim启动时间

时间:2009-11-06 14:03:00

标签: debugging optimization vim profiling

使用Vim时我启用了很多插件 - 多年来我一直在收集插件。我有点厌倦了Vim现在开始的时间,所以我想介绍它的启动,看看我有多少插件负责。

有没有办法分析Vim的启动或脚本运行?理想情况下,我想知道Vim在它加载的每个Vim脚本中花了多长时间。

10 个答案:

答案 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配置文件输出来说并不明显(但很重要)。

您将获得如下结果数字:

vim-plugins-profile figure

以及像这样的文本输出:

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的系统上更常见。

它也稍微容易扩展,因此功能如下:

  • 自动检测插件文件夹,
  • 条形图感谢matplotlib,
  • 对多次执行运行分析以获得平均值/标准差
  • 支持 vim neovim
  • 可以与完整vim命令一起使用来测试延迟加载功能,打开具有特定文件类型的文件等。
  • 将结果导出到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-profiler

答案 6 :(得分:5)

如果您正在从.vimrc文件加载插件,那么您可以做的是在文件的某些部分放置q以使其退出,这样您就可以使用进程计时器,例如unix time命令。更彻底的是,这看起来像:

  1. 备份现有.vimrc文件
  2. 除了选定数量的插件外,其他所有插件
  3. 插入q
  4. 重复致电time vim并平均
  5. 恢复备份
  6. 这不优雅,但我认为它可以完成工作。

答案 7 :(得分:1)

有一个插件可以分析vim的启动时间。

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

答案 8 :(得分:1)

打开特定文件时跟踪--startime可能很方便

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

答案 9 :(得分:0)

是否存在可以像这样使用的bash time命令:

time vim

编辑:不包含脚本启动时间。请改用@jamessan建议。