Wie kann ich einen sehr langsamen Emacs beheben?

41

Ich schreibe ein Dokument und habe ein Problem mit der Leistung von Emacs, von dem ich glaube, dass sie erst gestern erschienen ist. Ich habe keine Änderungen an meiner Init-Datei vorgenommen oder neue Pakete installiert.

Das Problem ist, dass es beim Schreiben eine sehr merkliche Verzögerung zwischen dem Drücken der Buchstaben auf der Tastatur und dem Anzeigen auf dem Bildschirm gibt. Manchmal sehe ich sie immer noch auf dem Bildschirm drucken, nachdem ich das Wort eingegeben habe.

Ich weiß nicht, ob es außer der Tippgeschwindigkeit noch andere Probleme gibt (ich kann nur vermuten, dass es solche gibt), aber ich habe sie nicht bemerkt.

Was kann dieses Problem verursachen?
Liegt es an Emacs oder an der Leistung meines PCs? Welche Variablen beeinflussen im Allgemeinen die Leistung von Emacs?

Meine Emacs-Version ist GNU Emacs 24.3.1

Der aktive Hauptmodus ist:

  1. Latex

und die kleinen aktiven Modi sind:

  1. Automatisch vervollständigen
  2. Automatische Komposition
  3. Automatische Komprimierung
  4. Automatische Verschlüsselung
  5. Blink-Cursor
  6. Dateiname-Schatten
  7. Font-Sperre
  8. Global-Auto-Complete
  9. Global-Font-Lock Global-Hl-Zeile
  10. Zeilennummer
  11. Mausrad
  12. Shell-Dirtrack
  13. Show-Paren
  14. Smartparens
  15. Smartparens-Global
  16. Tooltip Transient-Mark
Adam
quelle
5
C-h mZeigt den Hauptmodus und alle aktiven Nebenmodi an. Sie können jeden Nebenmodus langsam deaktivieren, bis Sie die Ursache gefunden haben. Es könnte der Hauptmodus selbst sein, aber die Nebenmodi sind die wahrscheinlichsten Verdächtigen. Ohne die Angabe der von Ihnen verwendeten Modi würde jeder hier nur im Dunkeln stechen, was mit Ihrem Problem los ist. Ich habe eine seltene Situation, die bei bestimmten Bildern auftritt - z. B. wenn mir jemand eine E-Mail mit einem Telefonsymbol oder anderen speziellen Symbolen im iPhone sendet -, aber dies ist ein isoliertes Problem bei der Verlangsamung, das durch spezielle Symbole verursacht wird.
Gesetzesliste
2
linum-modeVerlangsamt die Leistung in großen Puffern. nlinum-modegeschrieben von Stefan ist besser für größere Puffer.
Gesetzesliste
Was passiert auf Ihrem Computer? Wie viel Speicher wird verwendet? Wie aktiv ist Ihre CPU und welche Programme sind für den größten Teil ihrer Nutzung verantwortlich? Das Problem kann auch ein anderes Programm sein.
Dave
2
Oh, ich habe diese Referenz gerade in einem anderen Thread gepostet: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - das wäre ein guter Anfang. Ein Schuss im Dunkeln: Versuchen Sie, die Schriftsperre zu deaktivieren. Gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - dies ist mein erster üblicher Verdächtiger (der zu Recht häufig die meisten CPU-Zyklen in Anspruch nimmt) ).
wvxvw
1
Die bloße Anzahl von Vorschlägen in diesen Kommentaren zeigt, dass diese Frage etwas zu vage ist. Ich habe den Titel umformuliert, um nach Anweisungen zu fragen, anstatt nach einer Lösung. Ich habe auch eine entsprechende Antwort gegeben. Bitte stellen Sie eine neue Frage, sobald Sie diese Anweisungen befolgt haben, oder hinterlassen Sie einen Kommentar, wenn sie nicht klar waren.
Malabarba

Antworten:

64

Was kann dieses Problem verursachen? Liegt es an Emacs oder an der Leistung meines PCs? Welche Variablen beeinflussen im Allgemeinen die Leistung von Emacs?

Emacs hat ungefähr 50.000 interne Variablen und ein paar Tausend externe Pakete, die im Durchschnitt aus jeweils ein paar Dutzend Variablen bestehen. Sie können nicht erwarten, dass dies allgemein von jemandem beantwortet wird. :-)

Sie können dies einfach anhand des Kommentarthreads unter Ihrer Frage feststellen. Es gibt ein halbes Dutzend verschiedene Vorschläge, die alle gleichermaßen gültig sind.

Was können Sie tun, um das Problem zu lokalisieren?

Option 1: Deaktivieren Sie die Modi

Deaktivieren Sie die von Ihnen aufgelisteten Nebenmodi und finden Sie heraus, mit welchem ​​Sie das Leistungsproblem lösen können. Ich würde beginnen mit smartparens, auto-complete, line-numberund font-lock, und dann die Liste nach unten folgen.

"Ich hatte dieses Problem gestern nicht" bedeutet sehr wenig, verlassen Sie sich nicht zu stark darauf. Deaktivieren Sie einfach die Nebenmodi, bis sie behoben sind.

Wenn keiner der Nebenmodi Ihr Problem behebt, können Sie Teile Ihrer Init-Datei auskommentieren, bis Sie herausfinden, welches Snippet dies verursacht hat. Stellen Sie auf jeden Fall eine neue Frage, wenn Sie etwas Bestimmtes haben.

Option 2: Der Profiler

  1. Rufen Sie auf M-x profiler-start RET RET(die zweite RETist zu bestätigen cpu);
  2. Tippen Sie etwas, vorzugsweise einen ganzen Absatz oder mehr.
  3. Aufrufen M-x profiler-report.

Dadurch erhalten Sie einen Puffer, der die von jeder Funktion benötigte CPU-Zeit beschreibt. Wenn Sie TABauf eine Zeile tippen, wird diese erweitert, um die darin enthaltenen Funktionen anzuzeigen. Navigieren Sie durch diesen Puffer, bis Sie herausfinden, welche Funktion so viel CPU-Zeit benötigt.

Was mache ich danach?

Sobald Sie die Funktion oder das Paket oder das Snippet gefunden haben, die bzw. das eine Verzögerung verursacht, können Sie (in keiner bestimmten Reihenfolge):

  • Stellen Sie hier eine neue Frage zu diesem speziellen Nebenmodus (oder dieser Funktion oder diesem Snippet).
  • Melden Sie dem Paketbetreuer einen Fehler.
    • Überprüfen Sie die Kommentare oben in der Quelldatei des Pakets. Wenn es eine URL enthält (speziell auf Github), gibt es dort wahrscheinlich einen Issue Tracker.
    • Einige Pakete bieten einen Befehl wie M-x PACKAGE-bug-report.
    • Seine oder ihre E-Mail sollte sich oben in der Quelldatei des Pakets befinden.
  • Wenn es sich um ein integriertes Paket handelt, können Sie es mit melden M-x report-emacs-bug.
  • Selbst für Pakete, die nicht integriert sind, können Sie die help-gnu-emacsMailingliste um Hilfe bitten .
Malabarba
quelle
4
Dies sind großartige Anweisungen. Vielen Dank! Wie ich in den Kommentaren zu meiner Frage gesagt habe, wusste ich nicht, dass es vage sein würde. Ich dachte, die Antwort wäre elementar für jemanden, der sich mit Emacs auskennt (wie viele von Ihnen). Auf jeden Fall ist dieser "Leitfaden" großartig und ich bin froh, dass meine Frage dazu geführt hat. :)
Adam
3
+100000 für die Verwendung des Profilers. Wenn Sie dumm sind (wie ich) und versehentlich einen teuren Funktionsaufruf in die Mode-Zeile jedes Puffers einfügen, ist dies mit Sicherheit der richtige Weg, um herauszufinden, was los ist.
Radon Rosborough
Wie deaktivierst du den Nebenmodus? Aktivierte Nebenmodi: Async-Bytecomp-Paket Automatisch vervollständigen Automatisch komponieren Automatisch komprimieren Dateiname Schatten Flycheck Flyspell Font Lock Global Automatisch vervollständigen Global Automatisch zurücksetzen Global Eldoc Global Flycheck Global Font Lock Global -Git-Commit Global-Hl-Line Global-Hunger-Delete Global-Linum-Line-Nummer Linum Magit-Auto-Revert Org-Bullets Org-Einzug Override-Globales Projektil Pyvenv Recentf Speicherplatz Shell-Dirtrack Show-Paren Show-Smartparens Show-Smartparens-Global Größenangabe Smartparens Smartparens-Global
Stryker