Temps de démarrage du profilage Vim

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:

vim-plugins-profile figure

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:

  • Détection automatique du dossier du plugin,
  • Bar plot grâce au matplotlib,
  • Exécutez l’parsing sur plusieurs exécutions pour obtenir l’ écart moyen / standard ,
  • Soutient à la fois vim et neovim ,
  • Peut être utilisé avec une commande vim complète pour tester les fonctionnalités de chargement différé, en ouvrant un fichier avec un type de fichier spécifique, etc.,
  • Exportez le résultat dans un fichier csv.

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 ===================================== 

vim-profileur

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:

  1. sauvegarde le fichier .vimrc existant
  2. commenter tout sauf un certain nombre de plugins
  3. insérer une ligne q
  4. time vim appel à répétition et moyenne
  5. restaurer la sauvegarde

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.

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

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.