Comment voir quels plugins ralentissent Vim?

318

Existe-t-il un moyen de profiler les plugins Vim?

Mon MacVim devient de plus en plus lent lorsque j'ouvre un grand .py. Je sais que je pourrais désélectionner tous les plugins et resélectionner un par un pour vérifier quel plugin est le coupable, mais existe-t-il un moyen plus rapide?

Mon dotvim est ici: https://github.com/charlax/dotvim

charlax
la source
1
En fait, le démarrage est très bien. Vim devient lent après quelques minutes d'utilisation. Cela concerne particulièrement les .pyfichiers.
charlax
La recherche binaire est la voie à suivre. Vous avez posé votre question il y a 2 heures, la cause de votre problème aurait été trouvée à ce moment-là. L' autocmdintuition d' Ingo Karkat me semble la plus plausible.
romainl
C'est vrai - mais ne pensez-vous pas que s'il existe un moyen d'obtenir le même résultat en une seule heure, c'est mieux? De plus, le démarrage va bien, c'est après quelques minutes d'utilisation, donc cela aurait pris très longtemps. autocmdça a l'air cool. Je viens de l'essayer, mais Vim n'est pas lent en ce moment.
charlax
1
Je viens de faire face au même problème, mais sur de gros fichiers rubis. Trouvé qui folding=syntaxpeut ralentir. Essayé folding=manualet maintenant tout fonctionne bien
Aleksandr K.

Réponses:

496

Vous pouvez utiliser le support de profilage intégré: après avoir lancé vim do

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(contrairement à l'arrêt, ce noautocmdn'est pas vraiment nécessaire, cela accélère juste la sortie de vim).

Remarque: vous n'obtiendrez pas d'informations sur les fonctions qui ont été supprimées avant la fermeture de vim.

ZyX
la source
13
Ceci est incroyable. J'ai pu voir que EasyTags est le coupable. Merci beaucoup!
charlax
5
cela m'a aidé à détecter "vim-gitgutter" comme obstruction.
Sebastián Grignoli
6
@subjectego :set more | verbose function {function_name}vous montrera le contenu de la fonction et où il se trouve.
ZyX
26
Si ce n'est pas clair, le résultat profile.logest un fichier dans le répertoire courant de votre session Vim.
Micah Smith
7
Aller à la fin de profile.logpour voir la liste des fonctions triées par durée totale ( profile.logme paraissait inutile avant de la trouver il y a une liste triée à la fin).
Andrey Portnoy
78

J'ai trouvé une autre méthode de construction de vim très utile pour afficher les messages de synchronisation exacte lors du chargement de votre .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Veuillez exécuter:

:help --startuptime

dans VIM pour obtenir plus d'informations.

feihu
la source
3
Juste au cas où quelqu'un d'autre se poserait la question, cela n'existe pas dans toutes les distributions vim / gvim. N'a pas en stock Win Gvim 7.4 ici (bien que cela soit documenté dans viminfo)
thynctank
1
@thynctank J'ai essayé mon gvim 7.4 et cela a fonctionné. Voici ma versionIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu
Meilleure réponse! M'a aidé à identifier le plugin le plus lent qui m'a mis en colère à chaque démarrage de vim. Thanx :)
kovpack
Cela et la base -Vont montré qu'il s'agissait d'un $HOMEproblème non local à l'origine du problème
bsb
Vous devez exécuter :epour actualiser le fichier. Trier le fichier en place en fonction du temps total pris pour chaque opération comme ça:%! sort -k2 -nr
Ashutosh Jindal
31

Il peut s'agir d'un plugin ou de la coloration syntaxique; essayez un:syntax off quand cela se produit et voyez si Vim devient instantanément plus rapide.

Avec les plugins, une "lenteur générale" vient généralement des autocommandes; a les :autocmdrépertorie tous. Enquêter en tuant certains d'entre eux via :autocmd! [group] {event}. Passer d'évènements plus fréquents (ie CursorMoved[I]) à des évènements moins fréquents (eg BufWinEnter).

Si vous pouvez reproduire de manière assez fiable la lenteur, une recherche binaire peut vous aider: Éloignez la moitié des fichiers de ~/.vim/plugin/ , puis l'autre, répétez dans l'ensemble qui était lent.

Si vous avez vraiment besoin de regarder sous le capot, obtenez une version Vim dont la :profilecommande est activée. (Pas la version Windows vanille BIG, mais celle qui est livrée avec Cygwin l'a; aussi, l'auto-compilation est assez facile dans la plupart des distributions.)

Ingo Karkat
la source
17

J'ai trouvé utile d'imprimer toutes les activités de Vim dans un fichier en démarrant Vim avec l' -Voption:

vim -V12log

Cela fournit la verbosité maximale (niveau 12) et la renvoie dans le fichier log. Vous pouvez ensuite effectuer certaines actions Vim que vous savez être lentes, puis voir quelles fonctions / mappages sont appelés en interne.

Prince Goulash
la source
10
mais il n'y a pas de timing sur le journal
Kokizzu
7

Si vous rencontrez des problèmes avec les opérations de mise à jour d'écran ( ^L, défilement, etc.) qui sont lentes, votre problème peut être un fichier de surbrillance de syntaxe inefficace. Vous pouvez tester cela en désactivant temporairement la coloration syntaxique ( :syn off) et en voyant si le problème disparaît; si vous voulez fouiller dans les détails, vous pouvez profiler le fichier de syntaxe actuel en utilisant :syntime:

  1. Ouvrez un fichier qui provoque des problèmes de performances mettant en évidence la syntaxe.
  2. Exécutez :syntime onpour démarrer le profilage.
  3. Faites défiler un peu le fichier.
  4. Courir :syntime report pour générer un rapport. Les modèles énumérés en premier dans le rapport sont ceux qui ont pris le plus de temps à traiter.
duskwuff -inactif-
la source
2
S'il semble que le fichier de surbrillance de syntaxe soit le coupable, quelle est la prochaine ligne de conduite?
Spectator6