Wie kann man sehen, welche Plugins Vim langsam machen?

317

Gibt es eine Möglichkeit, Vim-Plugins zu profilieren?

Mein MacVim wird langsamer und langsamer, wenn ich ein großes öffne .py. Ich weiß, ich könnte alle Plugins abwählen und nacheinander erneut auswählen, um zu überprüfen, welches Plugin der Schuldige ist, aber gibt es einen schnelleren Weg?

Mein dotvim ist hier: https://github.com/charlax/dotvim

charlax
quelle
1
Eigentlich ist der Start in Ordnung. Vim wird nach einigen Minuten langsam. Dies betrifft insbesondere .pyDateien.
Charlax
Binäre Suche ist der richtige Weg. Sie haben Ihre Frage vor 2 Stunden gestellt, die Ursache Ihres Problems wäre in dieser Zeit gefunden worden. Ingo Karkats Vermutung autocmdklingt für mich am plausibelsten.
Romainl
Das stimmt - aber glauben Sie nicht, dass es besser ist, wenn es eine Möglichkeit gibt, in nur einer Stunde das gleiche Ergebnis zu erzielen? Darüber hinaus ist der Start in Ordnung, er dauert einige Minuten und hätte sehr lange gedauert. autocmdsieht gut aus. Ich habe es gerade versucht, aber Vim ist momentan nicht langsam.
Charlax
1
Nur vor dem gleichen Problem, aber auf großen Ruby-Dateien. Gefunden, das folding=syntaxkann langsamer werden. Versucht mit folding=manualund jetzt funktioniert alles gut
Aleksandr K.

Antworten:

496

Sie können die integrierte Profilerstellungsunterstützung verwenden: Nach dem Start von vim do

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

(Anders als das Beenden noautocmdnicht wirklich erforderlich ist, beschleunigt es das Beenden von vim nur).

Hinweis: Sie erhalten keine Informationen zu Funktionen, die vor dem Beenden von vim gelöscht wurden.

ZyX
quelle
13
Das ist großartig. Ich konnte sehen, dass EasyTags der Schuldige ist. Vielen Dank!
Charlax
5
Dies half mir, "vim-gitgutter" als Verstopfung zu erkennen.
Sebastián Grignoli
6
@subjectego :set more | verbose function {function_name}zeigt Ihnen den Funktionsinhalt und wo er sich befindet.
ZyX
26
Wenn es nicht klar ist, ist das Ergebnis profile.logeine Datei im aktuellen Verzeichnis Ihrer Vim-Sitzung.
Micah Smith
7
Springe zum Ende von profile.log, um die Liste der Funktionen nach Gesamtzeit sortiert zu sehen ( profile.logschien mir nutzlos, bevor ich fand, dass es am Ende eine sortierte Liste gibt).
Andrey Portnoy
78

Ich habe eine andere sehr hilfreiche vim-Erstellungsmethode gefunden, um die genauen Timing-Meldungen beim Laden Ihrer .vimrc anzuzeigen.

vim --startuptime timeCost.txt timeCost.txt

Bitte renne:

:help --startuptime

in VIM, um weitere Informationen zu erhalten.

feihu
quelle
3
Nur für den Fall, dass sich jemand wundert, existiert dies nicht in allen vim / gvim-Distributionen. Nicht auf Lager Win Gvim 7.4 hier drüben (obwohl es in viminfo dokumentiert ist)
Thynctank
1
@thynctank Ich habe mein GVIM 7.4 ausprobiert und es hat funktioniert. Hier ist meine VersionIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu
Beste Antwort! Hat mir geholfen, das langsamste Plugin zu identifizieren, das mich bei jedem Start wütend gemacht hat.
Vielen Dank
Diese und Grund -Vzeigte es sich um eine nicht-lokale war $HOMEdas Problem verursacht
bsb
Sie müssen ausführen :e, um die Datei zu aktualisieren. Sortieren Sie die Datei an Ort und Stelle nach der Gesamtzeit, die für jede Operation benötigt wird:%! sort -k2 -nr
Ashutosh Jindal
30

Es kann sich um ein Plugin oder eine Syntaxhervorhebung handeln. Versuchen Sie es :syntax offin diesem Fall und prüfen Sie, ob Vim sofort schneller wird.

Bei Plugins kommt eine "allgemeine Langsamkeit" normalerweise von Autobefehlen; a :autocmdlistet sie alle auf. Untersuchen Sie, indem Sie einige von ihnen über töten :autocmd! [group] {event}. Gehen Sie von häufigeren Ereignissen (dh CursorMoved[I]) zu weniger häufigen Ereignissen (z BufWinEnter. B. ) über.

Wenn Sie die Langsamkeit einigermaßen zuverlässig reproduzieren können, kann eine binäre Suche hilfreich sein: Verschieben Sie die Hälfte der Dateien weg ~/.vim/plugin/und wiederholen Sie die andere in dem Satz, der langsam war.

Wenn Sie wirklich unter die Haube schauen müssen, besorgen Sie sich eine Vim-Version, für die der :profileBefehl aktiviert ist. (Nicht die Vanilla BIG Windows-Version, sondern die im Lieferumfang von Cygwin enthaltene Version; auch das Selbstkompilieren ist in den meisten Distributionen recht einfach.)

Ingo Karkat
quelle
16

Ich fand es hilfreich, alle Vim-Aktivitäten in eine Datei zu drucken, indem ich Vim mit der folgenden -VOption starte:

vim -V12log

Dies bietet die maximale Ausführlichkeit (Stufe 12) und gibt sie in die Datei aus log. Sie können dann einige Vim-Aktionen ausführen, von denen Sie wissen, dass sie langsam sind, und dann sehen, welche Funktionen / Zuordnungen intern aufgerufen werden.

Prinz Gulasch
quelle
10
aber es gibt kein Timing auf dem Protokoll
Kokizzu
7

Wenn Sie Probleme mit ^Llangsamen Bildschirmaktualisierungsvorgängen ( , Bildlauf usw.) haben, liegt das Problem möglicherweise an einer ineffizienten Syntaxhervorhebungsdatei. Sie können dies testen, indem Sie die Syntaxhervorhebung ( :syn off) vorübergehend deaktivieren und prüfen , ob das Problem behoben ist. Wenn Sie sich mit den Details befassen möchten, können Sie die aktuelle Syntaxdatei folgendermaßen profilieren :syntime:

  1. Öffnen Sie eine Datei, die Syntax hervorhebt und Leistungsprobleme hervorhebt.
  2. Ausführen :syntime on, um die Profilerstellung zu starten.
  3. Scrollen Sie ein wenig durch die Datei.
  4. Ausführen :syntime report, um einen Bericht zu generieren. Die zuerst im Bericht aufgeführten Muster haben die meiste Zeit für die Verarbeitung benötigt.
Dämmerung -inaktiv-
quelle
2
Wenn die Syntax-Highlight-Datei der Schuldige zu sein scheint, wie geht es dann weiter?
Spectator6