Das Paket mit mehreren Cursorn führt dazu, dass Emacs langsam ausgeführt werden


9

Ich verwende das Paket Mehrere Cursor in einer HTML-Datei und es ist fantastisch für ein paar Cursor, aber wenn ich mehr als 30 oder 50 Cursor erstelle, wird es furchtbar langsam und es dauert ungefähr fünf oder sechs Sekunden, um die Cursor zu verschieben.
Benutze ich es falsch oder ist es nur nicht darauf vorbereitet, so viele Cursor zu erstellen?


2
Es hängt davon ab, was im Puffer vor sich geht - einige Puffer sind für Magnars Mehrfachcursor nur schwieriger. Manchmal kann ich ein paar Hundert ohne eine signifikante Verlangsamung haben, und manchmal verursachen nur ein paar in (sagen wir wdired-mode) eine Verlangsamung. Es gibt eine offene Funktionsanforderung - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 -, um mehrere Cursorfunktionen in den C-Quellcode zu verschieben, aber sie wird derzeit noch diskutiert. Eines meiner vorgeschlagenen Verkaufsargumente für das Emacs-Entwicklungsteam war eine potenzielle Geschwindigkeitssteigerung, wenn es in die C-Code-Basis integriert wurde.
Lawlist

3
Ich habe keine Lösung, wollte aber die gleiche Langsamkeit auch für mich bestätigen. Es würde mich nicht wundern, wenn das Problem auf Probleme mit der Schriftsperre zurückzuführen ist. Wenn ich die Schriftsperre global deaktiviere, werden die Cursor wieder bissig.
Emacs User

1
... in diesem Fall würden mehrere Cursor die Verlangsamung nicht direkt verursachen (selbst wenn sich herausstellt, dass die Langsamkeit nur ein Faktor ist, wenn Sie sie verwenden). Ich würde M-x profiler-startund mache ein paar langsame Dinge und dann und gehe M-x profiler-reportweiter auf die Elemente ein, die den größten Teil der CPU-Zeit in Anspruch nehmen, bis Sie sie auf eine bestimmte Bibliothek (falls vorhanden) isolieren können. Versuchen Sie dann, diese Bibliothek zu deaktivieren. Vergessen Sie nicht, den Profiler anzuhalten, wenn Sie damit fertig sind.
Phils

Antworten:


5

Eine Liste von Nebenmodi, die im Modus mit mehreren Cursorn nicht gut funktionieren, kann über eingestellt werden mc/unsupported-minor-modes. Alle dieser Liste hinzugefügten Modi werden deaktiviert, wenn Sie in den Modus für mehrere Cursor wechseln. Sie werden wieder aktiviert, sobald Sie den Modus für mehrere Cursor verlassen.

Sie können dieser Liste wie folgt ein Element hinzufügen

(add-to-list 'mc/unsupported-minor-modes 'flyspell-mode)

Dies macht einen großen Unterschied für die Reaktionsfähigkeit des Modus mit mehreren Cursorn. Ich fand, dass die beiden Nebenmodi mit dem größten Einfluss der Linum-Modus und der Flyspell waren.


Wenn jemand versuchen könnte zu erklären, warum Flyspell die Dinge verlangsamt (oder ein präzises Rezept gibt, um die Langsamkeit mit Flyspell zu reproduzieren), könnten wir vielleicht versuchen, das Problem zu beheben.
Stefan

1
Ich habe versucht, die Langsamkeit zu profilieren, konnte jedoch kein konsistentes Muster finden. Davon abgesehen ist die durch Flyspell eingeführte Langsamkeit nicht schlecht, das Modul, das ich bei weitem schlechter finde, ist der Linum-Modus. Durch Ausschalten des Linum-Modus konnte ich von 30 Cursorn gleichzeitig auf über 600 wechseln.
Charles Ritchie

Ein reproduzierbares Rezept würde einen langen Weg gehen.
Stefan

1
Danke für die Hilfe!. es scheint, dass dies das Problem war. Indent-Guide-Modus und Linum-Modus, wo diejenigen, die ich deaktivieren muss (ich habe Indent-Guide deaktiviert und Linum durch nlinum ersetzt). Jetzt kann ich Hunderte von Cursors ohne Verzögerung haben.
Fabman

0

... mehr als 30 oder 50 Cursor wird es furchtbar langsam ....

Hier ist eine temporäre Lösung: Passen Sie diese Variable an

mc/max-cursors

auf einen Wert von weniger als 30 als Problemumgehung. Der Standardwert ist Null, was keine Begrenzung bedeutet. Die tatsächliche Anzahl zum Wiederherstellen der Geschwindigkeit hängt vom Puffertyp, den verwendeten Schriftarten und dem, was gerade ausgeführt wird, ab. In jedem Fall wurde das Problem, das Sie haben, weit verbreitet gemeldet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.