J'ai beaucoup de plugins activés lors de l'utilisation de Vim - j'ai collecté des plugins au fil des ans. Je suis un peu fatigué du temps que Vim prend pour démarrer maintenant, donc je voudrais profiler son démarrage et voir lequel des nombreux plugins dont je suis responsable.
Existe-t-il un moyen de profiler le démarrage de Vim ou l'exécution de script? Idéalement, j'aimerais savoir combien de temps Vim passe dans chaque script Vim qu'il charge.
Si vous utilisez Vim 7.2.269 ou une version ultérieure, il existe l'option --startuptime que vous pouvez utiliser.
vim --startuptime vim.log
de l'aide (vim -h
):
--startuptime <file> Write startup timing messages to <file>
Vous pouvez utiliser le mécanisme de profilage de vim:
vim --cmd 'profile start profile.log' \
--cmd 'profile func *' \
--cmd 'profile file *' \
-c 'profdel func *' \
-c 'profdel file *' \
-c 'qa!'
Après avoir exécuté ce qui précède, vous trouverez un fichier appelé profile.log dans le répertoire actuel avec toutes les informations requises. Pour obtenir une table d'informations par script similaire à une table par fonction déjà présente, utilisez (après avoir ouvert ce fichier dans 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])'))
Il ne sera pas trié, mais vous pouvez toujours utiliser la commande :sort
Intégrée si le nombre de scripts est trop important.
J'ai créé this projet Github afin de mieux répondre à votre question. Fondamentalement, il résume le calendrier de chaque appel de fonction pour chaque plug-in, ce qui n'est pas évident (mais important) à partir de la sortie du profil brut de vim.
Vous obtiendrez un résultat comme celui-ci:
Avec une sortie de texte comme celle-ci:
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!
Vous pouvez exécuter vim -V
, dirigez la sortie via un utilitaire qui ajoute des horodatages et analyse la sortie. Cette ligne de commande fait cela, par exemple:
vim -V 2>&1 | Perl -MTime::HiRes=time -ne 'print time, ": ", $_' | tee vilog
Vous devrez peut-être taper aveuglément :q pour revenir à votre invite. Ensuite, vous devriez trouver le fichier vilog
dans votre répertoire courant avec les horodatages d'embauche au début de chaque ligne.
Si vous pouvez le faire avec une granularité d'une seconde, vous pouvez le faire:
vim -V 2>&1 | Perl -ne 'print time, ": ", $_' | tee vilog
Sur la base du travail effectué par @ hyiltiz qui dépend de R, j'ai fait un version Python du profileur, car il est plus souvent disponible sur un système que R.
Il est également légèrement plus facile à étendre, les fonctionnalités sont donc les suivantes:
La sortie est similaire à ce que fournit 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
=====================================
J'ai affiné le vim -V solution par innaM pour montrer le temps delta:
vim -V 2>&1 | Perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
Si vous chargez vos plugins à partir d'un fichier .vimrc, ce que vous pourriez faire est de mettre un q
sur une ligne à mi-chemin dans le fichier pour le faire quitter afin que vous puissiez utiliser un minuteur de processus, comme l'Unix time
, commande. De manière plus approfondie, cela ressemblerait à:
.vimrc
fichierq
time vim
à répétition et moyenneCe n'est pas élégant mais je pense que cela fera l'affaire.
Il peut être pratique de tracer le --startime
lors de l'ouverture d'un fichier particulier
gvim app/views/layouts/application.html.erb --startuptime time.log
Il existe un plugin pour profiler l'heure de démarrage de vim.
N'y a-t-il pas une commande bash time
qui peut être utilisée comme ceci:
time vim
EDIT : N'inclut pas l'heure de démarrage des scripts. Utilisez plutôt la suggestion @jamessan.