Bewegungsverzögerung für Emacs-Punkt (Cursor)

12

Beim Laufen previous-line, C-poder <up>springt der Cursor eine Zeile ohne Probleme oder Verzögerungen auf. Beim Laufen next-line, C-noder <down>springt der Cursor richtig eine Zeile nach unten, aber mit einer deutlichen Verzögerung. Wenn ich die Nach-Unten-Taste gedrückt halte, kann ich nicht einmal sehen, dass sich der Punkt bewegt. Er erscheint nur irgendwo darunter. Ich habe den Emacs-Profiler ausgeführt und es scheint, dass der Schuldige ist cl-position. Was sich herausstellt, ist, dass previous-lineder Cursor buchstäblich nur bewegt wird, während next-lineeine ganze Reihe von Funktionen ausgeführt werden.

Profiler-Ausgabe

Was ist das Problem und wie kann es behoben werden?

Damian Chrzanowski
quelle
Benutzt du visual-line-mode? Hast du einige sehr lange Schlangen?
Drew
Ich benutze keine visual-line-modeund ich habe keine langen Schlangen.
Damian Chrzanowski

Antworten:

22

Ich habe eine Antwort auf meine Frage gefunden, indem ich das freche Stück eingegrenzt und gegoogelt habe. Ich habe es geschafft, die Verzögerung um das Zehnfache zu reduzieren. Ich meine ... Es ist verrückt, wie viel Rechenleistung verbraucht next-linewurde, um einen Cursor nach unten zu bewegen?!?!

Die Reparatur:

Fügen Sie diesen Code in Ihre init.el ein: (setq auto-window-vscroll nil)

Der Beweis:

Lag deutlich reduziert

Jetzt next-linetriggert also nicht die line-move-partialReduzierung der Verzögerung. Ich erinnere mich nicht, mich eingerichtet auto-window-vscrollzu haben t. Es war nirgendwo in einer meiner .elDateien, ich bin mir nicht sicher, wie es anfangs eingestellt wurde t. Wenn also jemand Leistungsprobleme mit der Cursorbewegung hat, wird die Verzögerung mit der obigen Korrektur von ca. 50% -80% CPU-Zeit auf 5% CPU-Zeit reduziert !!!

Um schnell zu überprüfen, ob Sie betroffen sind, führen Sie einfach aus C-h v auto-window-vscroll. Wenn dies der tFall ist, treten möglicherweise schwerwiegende Leistungsprobleme auf. Überprüfen Sie mit dem Emacs-Profiler, ob die Cursorbewegung tatsächlich eine Verzögerung verursacht.

Viel Glück, Emacs-Liebhaber !!!

Fix-Quelle

Damian Chrzanowski
quelle
Bitte beachten Sie die Einreichung eine Emacs - Bug (oder Verstärkung Anfrage) dafür: M-x report-emacs-bug.
Drew
2
Ich werde es tun, da ich sehe, dass dies für viele Menschen ein Problem ist.
Damian Chrzanowski
1
Danke, Damian, es verbessert die Leistung, aber ich fühle mich immer noch ein bisschen unempfänglich
Neeraj Verma
3

Ich bin mir nicht ganz sicher, was das Problem ist, aber Ihr Profiler-Bericht scheint darauf hinzudeuten, dass Posn-at-Point mehr Redisplay als erwartet ausführt, was wiederum eine Neuberechnung der Mode-Line zur Folge hat und dass Powerline mehr Mühe beim Merken machen sollte seine Berechnung für die Modeline.

IOW, ich schlage vor, dass Sie M-x report-emacs-bugund Sie möglicherweise auch den Powerline-Betreuern einen Fehler melden.

Stefan
quelle
0

Es sieht so aus, als ob Sie Powerline verwenden. Insbesondere zeigen Sie den Projektilprojektnamen in Ihrer Modeline an. In letzter Zeit wurden einige Verbesserungen am Projektilpaket vorgenommen, die einige davon abmilderten. Stellen Sie sicher, dass Sie auf dem neuesten Stand sind.

https://github.com/bbatsov/projectile/issues/1212

https://github.com/bbatsov/projectile/pull/1213

Es ist auch möglich, Funktionen zu speichern, die die Modeline aufruft. Ich habe viel mit meiner Modeline gemacht, um es sehr schnell zu machen.

Aaron Jensen
quelle
Das Problem wurde bereits gelöst, Projektil oder Stromleitung waren nicht das Problem
Damian Chrzanowski
Ich bin froh, dass du es in Ordnung gebracht hast. Ihr Profil hat auf die Verlangsamung durch das Projektil hingewiesen. Es könnte sein, dass das Setzen von auto-window-vscroll auf nil dazu führt, dass Emacs unnötige Berechnungen der Moduslinie überspringen. Wie auch immer, ich bin froh, dass Sie es sortiert haben!
Aaron Jensen
Das ist ein guter Punkt. Ich hatte wirklich keine Zeit zu überprüfen, welches Paket das Problem war. Vielen Dank für die Vorschläge!
Damian Chrzanowski