J’ai beaucoup de plugins activés en utilisant Vim – j’ai collecté des plugins au fil des années. Je suis un peu fatigué de la durée de démarrage de Vim maintenant, alors je voudrais profiler son démarrage et voir quels sont les nombreux plugins dont je suis responsable.
Existe-t-il un moyen de profiler le démarrage ou l’exécution de scripts de Vim? Idéalement, j’aimerais savoir combien de temps Vim passe dans chaque script Vim chargé.
Si vous utilisez Vim 7.2.269 ou une version ultérieure, vous pouvez utiliser l’option –startuptime.
vim --startuptime vim.log
de l’aide ( vim -h
):
--startuptime Write startup timing messages to
Vous pouvez utiliser le propre 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 en cours avec toutes les informations requirejses. Pour obtenir une table d’informations par script similaire à celle déjà présente par fonction, utilisez (après ouverture de 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 sortingé, mais vous pourrez toujours utiliser la commande :sort
si le nombre de scripts est trop important.
J’ai créé ce projet Github afin de mieux répondre à votre question. Fondamentalement, il résume le timing pour chaque appel de fonction pour chaque plug-in, ce qui n’est pas évident (mais important) à partir de la sortie du profil brut vim.
Vous obtiendrez un résultat comme ceci:
Avec la sortie de texte comme ceci:
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
, diriger la sortie via un utilitaire qui ajoute des horodatages et parsing 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 à l’aveuglette : q pour revenir à votre invite. Par la suite, vous devriez trouver le fichier vilog
dans votre répertoire actuel avec les horodatages d’embauche au début de chaque ligne.
Si vous pouvez faire avec une granularité d’une seconde, vous pouvez le faire:
vim -V 2>&1 | perl -ne 'print time, ": ", $_' | tee vilog
J’ai affiné la solution vim -V par innaM pour montrer le delta time:
vim -V 2>&1 | perl -MTime::HiRes=time -ne '$a = time unless defined $a; print time - $a, ": ", $_' | tee vilog
Sur la base du travail effectué par @hyiltiz qui dépend de R, j’ai créé une version Python du profileur, car celle-ci est plus souvent disponible sur un système que R.
Il est également légèrement plus facile à étendre, donc les fonctionnalités sont les suivantes:
La sortie est similaire à celle fournie par 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 =====================================
Si vous chargez vos plug-ins à partir d’un fichier .vimrc, vous pouvez placer un q
sur une ligne à mi-chemin du fichier pour le quitter afin de pouvoir utiliser une horloge de processus, comme la commande unix. Plus précisément, cela ressemblerait à ceci:
.vimrc
existant q
time vim
appel à répétition et moyenne Ce n’est pas élégant mais je pense que ça va faire le travail.
Il y a un plugin pour profiler le temps de démarrage de vim.
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
N’y a-t-il pas une commande bash time
qui peut être utilisée comme ceci:
time vim
EDIT : n’inclut pas le temps de démarrage des scripts. Utilisez plutôt la suggestion @jamessan.