Git Product home page Git Product logo

startuptime.vim's Introduction

startuptime.vim

startuptime

Everybody knows that 1ms could mean the difference between life and death in Vim. This plugin breaks down the output of --startuptime so you can zero in on the scripts that are stealing dozens of your milliseconds each time Vim is started. You won't even need to leave the comfort of Vim.

Usage

Use the command :StartupTime to get an averaged startup profile. By default, it collects 10 samples.

It accepts multiple arguments. If a number is found, it is used as the sample count. If a filename is found, it will be used with the -u argument while profiling.

Example collecting 100 samples and using ~/foo.vim as the vimrc script:

:StartupTime ~/foo.vim 100

If -- is found in the command arguments, everything after it will be used verbatim in the program execution.

Example collecting 100 samples with manual arguments:

:StartupTime 100 -- -u ~/foo.vim -i NONE -- ~/foo.vim

Note that the first -- is dropped.

To upload the results, you can use a plugin like gist-vim.

Details

You have been able to profile Vim's startup by using the --startuptime argument since v7.2. However, the results are written to a file and it reports timing per loaded script. The output method and results aren't very useful to a layman that just wants to know what plugins are affecting Vim's startup speed.

This plugin takes multiple samples (10 by default) of the --startuptime output and displays the average times broken down by source. A source could be your [vimrc] scripts, Vim's built-in [runtime] scripts, or plugins. Vim doesn't actually have a formal plugin system. As a result, a "plugin" is simply a path found in runtimepath that looks like a plugin. If the source can't be determined, it display as [unknown].

The results shows the total average startup time and the 10 slowest "plugins". Below it are the load times, separated by startup phases and sorted by load time. Under each phase, load times are broken down by "plugin". Under each "plugin" are the load times for individual scripts. These are folded by default and can be opened with zo if you want more detail.

startuptime.vim's People

Contributors

mhinz avatar tweekmonster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

startuptime.vim's Issues

Plugins installed with Dein not properly recognized

This is on Arch Linux.

Total Time:   81.471 -- Flawless Victory


Slowest 6 plugins (out of 6)~
  [runtime]     64.756
      .dein     14.682
    [vimrc]     1.282
  [unknown]     0.390
   dein.vim     0.284
deoplete-go     0.077

Phase Detail:~

init highlight (25.762)~
21.386    [runtime] >
        19.779    /usr/share/nvim/runtime/filetype.vim
        1.084     /usr/share/nvim/runtime/syntax/syncolor.vim
        0.249     /usr/share/nvim/runtime/syntax/synload.vim
        0.138     /usr/share/nvim/runtime/syntax/syntax.vim
        0.055     /usr/share/nvim/runtime/ftplugin.vim
        0.046     /usr/share/nvim/runtime/indent.vim
        0.035     /usr/share/nvim/runtime/ftoff.vim
<
2.809     .dein >
        2.625     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/colors/solarized8_dark.vim
        0.185     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/ftdetect/ftdetect.vim
<
1.282     [vimrc] >
        0.862     /home/dev/.config/nvim/init.vim
        0.420     /home/dev/.config/nvim/dein/state_nvim.vim
<
0.284     dein.vim >
        0.284     /home/dev/.config/nvim/dein/repos/github.com/Shougo/dein.vim/autoload/dein.vim
<

sourcing vimrc file(s) (52.104)~
43.132    [runtime] >
        39.900    /usr/share/nvim/runtime/autoload/provider/python3.vim
        0.672     /usr/share/nvim/runtime/plugin/matchit.vim
        0.621     /usr/share/nvim/runtime/plugin/netrwPlugin.vim
        0.386     /usr/share/nvim/runtime/autoload/remote/host.vim
        0.250     /usr/share/nvim/runtime/plugin/zipPlugin.vim
        0.240     /usr/share/nvim/runtime/plugin/matchparen.vim
        0.235     /usr/share/nvim/runtime/plugin/gzip.vim
        0.210     /usr/share/nvim/runtime/plugin/tarPlugin.vim
        0.136     /usr/share/nvim/runtime/autoload/provider/pythonx.vim
        0.133     /usr/share/nvim/runtime/plugin/shada.vim
        0.110     /usr/share/nvim/runtime/plugin/tohtml.vim
        0.073     /usr/share/nvim/runtime/plugin/man.vim
        0.069     /usr/share/nvim/runtime/plugin/rplugin.vim
        0.036     /usr/share/nvim/runtime/plugin/spellfile.vim
        0.027     /usr/share/nvim/runtime/plugin/tutor.vim
        0.018     /usr/share/nvim/runtime/plugin/rrhelper.vim
        0.014     /usr/share/nvim/runtime/plugin/health.vim
<
8.895     .dein >
        4.821     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/fugitive.vim
        1.987     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/airline.vim
        0.450     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/UltiSnips.vim
        0.294     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/dein/autoload.vim
        0.269     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/go.vim
        0.246     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline.vim
        0.145     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/init.vim
        0.141     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/parts.vim
        0.130     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/after/plugin/UltiSnips_after.vim
        0.128     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/UltiSnips/map_keys.vim
        0.107     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/nvim_gui_shim.vim
        0.086     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/deoplete.vim
        0.051     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/vimsnippets.vim
        0.024     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/airline-themes.vim
        0.014     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/plugin/startuptime.vim
<
0.077     deoplete-go >
        0.077     /home/dev/.config/nvim/dein/repos/github.com/zchee/deoplete-go/plugin/deoplete-go.vim
<

clearing screen (3.606)~
2.978     .dein >
        1.017     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/themes/solarized.vim
        0.357     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/branch.vim
        0.317     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions.vim
        0.231     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/highlighter.vim
        0.191     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/whitespace.vim
        0.169     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/builder.vim
        0.133     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/util.vim
        0.108     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/default.vim
        0.096     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/section.vim
        0.095     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/po.vim
        0.074     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/themes.vim
        0.072     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/quickfix.vim
        0.070     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/wordcount.vim
        0.047     /home/dev/.config/nvim/dein/.cache/init.vim/.dein/autoload/airline/extensions/netrw.vim
<
0.390     [unknown] >
        0.390     /home/dev/.local/share/nvim/rplugin.vim
<
0.238     [runtime] >
        0.238     /usr/share/nvim/runtime/autoload/remote/define.vim
<

FEATURE: Add filetype or other hook for user mods

USE CASE: I'd like to add some custom local behavior to the startup-log.txt window (examples: a "q->quit mapping", a "CR -> fold-toggle").

With the buffer strategy of open and then name, there's no event I can see to add customization.

One approach is to set some sort of filetype, say "startuptime-log" (should be specific enough to not interfere with any other filetype). This allows autocmds to trigger off of filetype.

No full log with Vim due to usage of `-u` without `-N`

Vim's log stops at setting raw mode for me:

Log 1/10 >
  times in msec
   clock   self+sourced   self:  sourced script
   clock   elapsed:              other lines
  
  000.005  000.005: --- VIM STARTING ---
  000.069  000.064: Allocated generic buffers
  000.132  000.063: locale set
  000.146  000.014: GUI prepared
  000.148  000.002: clipboard setup
  000.150  000.002: window checked
  000.430  000.280: inits 1
  000.470  000.040: parsing arguments
  000.471  000.001: expanding arguments
  000.483  000.012: shell init
  000.614  000.131: Termcap init
  000.647  000.033: inits 2
  001.397  000.750: init highlight
  004.790  002.947  002.947: sourcing /home/user/.vim/autoload/plug.vim
  009.861  000.110  000.110: sourcing /usr/share/vim/vim80/pack/dist/opt/matchit/plugin/matchit.vim
  009.940  000.660  000.550: sourcing /usr/share/vim/vim80/macros/matchit.vim
  012.225  010.741  007.134: sourcing /home/user/.vimrc
  012.238  000.100: sourcing vimrc file(s)
  013.508  001.041  001.041: sourcing …/lib/fzf/plugin/fzf.vim
  014.513  000.507  000.507: sourcing /home/user/.vim/plugin/delayed_cursorline.vim
…
  016.725  001.752: loading plugins
  016.780  000.055: loading packages
  017.367  000.477  000.477: sourcing /home/user/.vim/after/plugin/after.vim
…
  017.428  000.147: loading after plugins
  019.501  002.073: inits 3
  024.420  004.919: setup clipboard
  024.448  000.028: setting raw mode

It turns out that this is caused due to the explicit usage of -u (with $MYVIMRC), but not using -N (and my vimrc having no set nocompatible).

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Feb 26 2018 23:00:19)
Included patches: 1-1542
Compiled by Arch Linux

no time unit

I hope it's nanosecond but my 6th sense tells me it's milliseconds (looking into the log helped)

Only [runtime] and [unknown] on Windows

On Windows all plugins that aren't in [runtime] seem to be unrecognized.

Total Time:   43.678 -- Flawless Victory


Slowest 2 plugins (out of 2)~
[runtime]	26.046  
[unknown]	17.632  

Phase Detail:~

init highlight (31.108)~
22.036    [runtime] >
	19.115    C:\Program Files\Neovim\share\nvim\runtime\filetype.vim
	1.530     C:\Program Files\Neovim\share\nvim\runtime\syntax\syncolor.vim
	0.615     C:\Program Files\Neovim\share\nvim\runtime\syntax\synload.vim
	0.463     C:\Program Files\Neovim\share\nvim\runtime\syntax\syntax.vim
	0.140     C:\Program Files\Neovim\share\nvim\runtime\ftoff.vim
	0.087     C:\Program Files\Neovim\share\nvim\runtime\ftplugin.vim
	0.087     C:\Program Files\Neovim\share\nvim\runtime\indent.vim
<
9.072     [unknown] >
	4.639     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\colors\solarized8_dark.vim
	2.980     C:\Users\xelra\AppData\Local\nvim\init.vim
	0.902     C:\Users\xelra\AppData\Local\nvim\dein/state_nvim.vim
	0.376     C:\Users\xelra\AppData\Local\nvim\dein\repos\github.com\Shougo\dein.vim\autoload\dein.vim
	0.174     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\ftdetect\ftdetect.vim
<

sourcing vimrc file(s) (8.025)~
4.523     [unknown] >
	3.031     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\plugin\airline.vim
	0.398     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\dein\autoload.vim
	0.317     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\plugin\go.vim
	0.249     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline.vim
	0.210     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\init.vim
	0.191     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\parts.vim
	0.071     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\plugin\airline-themes.vim
	0.058     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\plugin\startuptime.vim
<
3.502     [runtime] >
	0.795     C:\Program Files\Neovim\share\nvim\runtime\plugin\matchit.vim
	0.738     C:\Program Files\Neovim\share\nvim\runtime\plugin\netrwPlugin.vim
	0.329     C:\Program Files\Neovim\share\nvim\runtime\plugin\gzip.vim
	0.289     C:\Program Files\Neovim\share\nvim\runtime\plugin\matchparen.vim
	0.258     C:\Program Files\Neovim\share\nvim\runtime\plugin\zipPlugin.vim
	0.231     C:\Program Files\Neovim\share\nvim\runtime\plugin\tarPlugin.vim
	0.180     C:\Program Files\Neovim\share\nvim\runtime\plugin\tohtml.vim
	0.172     C:\Program Files\Neovim\share\nvim\runtime\plugin\shada.vim
	0.114     C:\Program Files\Neovim\share\nvim\runtime\plugin\rplugin.vim
	0.107     C:\Program Files\Neovim\share\nvim\runtime\plugin\man.vim
	0.078     C:\Program Files\Neovim\share\nvim\runtime\plugin\tutor.vim
	0.078     C:\Program Files\Neovim\share\nvim\runtime\plugin\spellfile.vim
	0.070     C:\Program Files\Neovim\share\nvim\runtime\plugin\health.vim
	0.061     C:\Program Files\Neovim\share\nvim\runtime\plugin\rrhelper.vim
<

clearing screen (4.546)~
4.038     [unknown] >
	1.405     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\themes\solarized.vim
	0.492     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions.vim
	0.319     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\highlighter.vim
	0.293     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions\whitespace.vim
	0.258     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\builder.vim
	0.216     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\util.vim
	0.195     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions\default.vim
	0.156     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\section.vim
	0.148     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions\quickfix.vim
	0.140     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\themes.vim
	0.128     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions\netrw.vim
	0.121     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\extensions\wordcount.vim
	0.114     C:\Users\xelra\AppData\Local\nvim\dein\.cache\init.vim\.dein\autoload\airline\msdos.vim
	0.053     C:\Users\xelra\AppData\Local\/nvim/rplugin.vim
<
0.508     [runtime] >
	0.508     C:\Program Files\Neovim\share\nvim\runtime\autoload\remote\host.vim
<

If language message is not en, it will occur some error in this circumstance。

add this in vimrc:

let g:list = [
			\]

:language message zh_CN then :StartupTime

处理 C:\Users\10786\AppData\Local\nvim\init.
vim 时发生错误:

第    1 行:

E697: List 缺少结束符 ']': 

E15: 无效的表达式: [

第    2 行:

E10: \ 后面应该跟有 /、? 或 &

:language message ja then :StartupTime

C:\Users\10786\AppData\Local\nvim\init.vim 
の処理中にエラーが検出されました:

行    1:

E697: リスト型の最後に ']' がありません: 

E15: 無効な式です: [

行    2:

E10: \ の後は / か ? か & でなければなりません

Any language which is not en is always result in this error.

Thank you!

Color should only be applied meaningfully

Right now there's some red color, but it isn't really obvious what the meaning of it is or why that particular text is colored at all.

Color should be applied meaningfully, if at all.

For example: Apply red, orange, yellow and green to plugins depending on their startuptime.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.