📊 Utility script to profile (n)vim (e.g. startup times of plugins)
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.images Update image Dec 13, 2015
.travis travis: fix for ultisnips Jan 20, 2016
.travis.yml Handle the case where only system plugins are available May 26, 2016
LICENSE Initial commit Nov 4, 2015
README.md README.md: use svg badge [skip ci] Jun 29, 2016
vim-profiler.py Handle the case where only system plugins are available May 26, 2016

README.md

vim-profiler

Build Status

Utility script to profile (n)vim (e.g. startup). For now, only startup time w.r.t. plugins is analyzed. The plugin directory is automatically found.

The script is inspired from vim-plugins-profile, but only depends on Python. It supports the following features:

  • run any vim/neovim command,
  • detect the plugin directory automatically,
  • handle GUI versions,
  • compute the average time/standard deviation over multiple runs,
  • export the result to a CSV file,
  • plot a bar chart.

Dependencies

Required:

  • Python 2 or Python 3,
  • vim or neovim.

Optional:

  • Matplotlib (for bar plot)

Usage

To list the available options:

$ vim-profiler.py -h
usage: vim-profiler.py [-h] [-o CSV] [-p] [-s] [-n N] [-r RUNS] ...

Analyze startup times of vim/neovim plugins.

positional arguments:
  cmd         vim/neovim executable or command

optional arguments:
  -h, --help  show this help message and exit
  -o CSV      Export result to a csv file
  -p          Plot result as a bar chart
  -s          Consider system plugins as well (marked with *)
  -n N        Number of plugins to list in the summary
  -r RUNS     Number of runs (for average/standard deviation)

The text summary looks like this:

$ vim-profiler.py 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         4.559   vim-fugitive
2         4.162   tcomment_vim
3         3.936   vim-hybrid
4         2.922   lightline.vim
5         1.551   supertab
6         1.522   vim-sneak
7         1.100   ultisnips
8         0.929   fzf.vim
9         0.916   fzf
10        0.877   vim-surround
=====================================

As for the plot (using Matplotlib):

$ vim-profiler.py -p -r 10 nvim
=====================================
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
=====================================

plot

You can also use a custom command. Simply write it after the other options:

$ vim-profiler.py vim -u NONE

Running vim to generate startup logs... done.
Loading and processing logs...
No plugin found. Exiting.

This is particularly useful if you want to test your plugin manager's lazy loading feature:

$ vim-profiler.py -n 5 nvim foo.cc

Running nvim to generate startup logs... done.
Loading and processing logs... done.
Plugin directory: /home/user/.config/nvim/plugged
====================================
Top 5 plugins slowing nvim's startup
====================================
1         5.613   vim-cpp-enhanced-highlight
2         3.457   vim-fugitive
3         2.864   tcomment_vim
4         2.389   vim-hybrid
5         1.870   lightline.vim
====================================

$ vim-profiler.py -n 5 nvim foo.cc -c ":exec ':normal ia' | :q\!"

Running nvim to generate startup logs... done.
Loading and processing logs... done.
Plugin directory: /home/user/.config/nvim/plugged
====================================
Top 5 plugins slowing nvim's startup
====================================
1       144.766   ultisnips
2        95.977   YouCompleteMe
3        11.408   vim-cpp-enhanced-highlight
4         3.463   vim-fugitive
5         2.992   tcomment_vim
====================================

Here ultisnips and YouCompleteMe were only loaded after entering insert mode.

License

GPLv3