Selbst bei Verwendung der Standardeinstellungen ( emacs -Q
) habe ich festgestellt, dass große C-Dateien mit Emacs nur langsam gescrollt werden können.
Wenn ich zum Beispiel eine große Datei öffne und halte Page-Down. Es wird 1-2 Seiten nach unten scrollen und dann ein oder zwei Sekunden lang hängen bleiben. Beim Loslassen des Dokuments wird viele Seiten nach unten gescrollt (etwa 20 Seiten). * *
Ich weiß, dass Emacs zu weniger unberechenbarem Verhalten fähig ist, denn wenn ich schnell auf tippe page down, kann es mithalten und hängt nicht mehr wie zuvor.
Ist es möglich, dass Emacs nicht versucht, mehrere Ereignisse gleichzeitig zu verarbeiten, sondern zwischen Ereignissen neu zeichnet?
Oder irgendwie reaktionsschneller werden, anstatt zu hängen, während versucht wird, viele Ereignisse zu verarbeiten?
* Die tatsächliche Verlangsamung wird in diesem Fall durch Syntaxhervorhebung verursacht, da, wenn ich das gesamte Dokument einmal scrolle, das Scrollen danach schnell ist. Ich habe verschiedene Optionen in Bezug auf das Sperren von Schriftarten untersucht und bin zu dem Schluss gekommen, dass die Standardeinstellungen für das Sperren von Schriftarten angemessen sind. Wenn ich sie optimiere, wird das Problem nicht gelöst. Ich habe dies erwähnt, da ich dies bereits untersucht habe und nicht denke, dass dies ein wichtiger Teil davon ist Frage.
quelle
emacs -Q
, um dies auszuschließen), oder es kann sein, dass Ihre Festplatte sehr langsam ist. Sie können auch versuchen, die Syntaxhervorhebung oder ein anderes hilfreiches Verhalten zu deaktivieren (den Puffer in den Grundmodus versetzen).Antworten:
Wie Sie bemerkt haben, geschieht dies im Grunde genommen, wenn die Wiedergabe aus irgendeinem Grund zu langsam ist. Im allgemeinen Fall können wir nicht viel tun (wenn es "viel zu langsam" ist), aber wenn es "nur ein bisschen zu langsam" ist, können Sie eines davon ausprobieren (oder beides, obwohl es wahrscheinlich nicht mehr als tut) nur einer der beiden):
Beachten Sie, dass beide neu in Emacs-25 sind.
quelle
fast-but-imprecise-scrolling
heißt es: " Wenn Sie nicht Null sind, beschleunigen Sie den Bildlauf. " Möglicherweise sollte das Beispiel einen Wert ungleich Null widerspiegeln, da dies den Bildlauf beschleunigen würde.Sie können dem Bildlaufbefehl ein numerisches Präfixargument übergeben, anstatt nur die Taste zu drücken und gedrückt zu halten, um es wiederholt aufzurufen.
Wenn Sie beispielsweise den
<next>
Schlüssel (auch bekannt alsPageDown
) verwenden, lautet der aufgerufene Befehlscroll-up-command
. UndC-h f scroll-up-command
sagt Ihnen, dass ein numerisches Präfix arg sagt, dass so viele Zeilen gescrollt werden sollen.Beispiel: Angenommen, Ihr Puffer enthält 50.000 Zeilen und der Cursor befindet sich oben (in der ersten Zeile). Wenn Sie dies tun
C-u 25000 <next>
, wird der Puffer zur Hälfte nach unten gescrollt (25.000 Zeilen).Es wird immer noch eine Pause geben, aber sie wird etwas kürzer sein.
Eine andere Möglichkeit besteht darin, sich um eine bestimmte Anzahl großer Emacs-Dinger nach unten zu bewegen. Wenn Ihr Puffer Textabschnitte mit
^L
(Strg-L, Formular-Feed) Zeichen trennt , können Sie die Seitennavigationsbefehle verwenden, z. B.forward-page
, an die gebunden istC-x ]
. Auch hier können Sie ein numerisches Präfixargument übergeben, um so viele Seiten gleichzeitig vorwärts zu bewegen. Wenn keine^L
Zeichen vorhanden sind , können Sieforward-paragraph
(C-<down>
)forward-line
oder einen anderen Bewegungsbefehl mit dem Präfix arg verwenden.Ebenso können Sie mit command
goto-line
(M-g M-g
) zu einer bestimmten Zeilennummer wechseln. (Wählen Sie eine große Zahl aus.) Der Befehlwhat-line
gibt an, wie die aktuelle Zeilennummer lautet (Sie können sie auch in der Moduszeile anzeigen lassen). (M->
führt Sie zum Ende des Puffers, woM-x what-line
Sie erfahren, wie viele Zeilen insgesamt vorhanden sind.)(Nach Ihrem Kommentar zum Überfliegen hinzugefügt, bis Sie dies oder jenes sehen.) Verwenden Sie die inkrementelle Suche für die Navigation. Suchen Sie vorwärts nach etwas in der Nähe, wo Sie scrollen möchten, entweder mit
C-s
oder (für die Regexp-Suche)C-M-s
.Wenn Sie die Bibliothek Isearch + verwenden , können Sie auch beliebige Prädikate im laufenden Betrieb in Ihre Suche einbeziehen .
Das heißt, Sie müssen nicht nur mit Mustervergleich suchen. Sie könnten beispielsweise suchen, um (1) einem Muster zu entsprechen, das einen ganzen Kommentarblock oder eine vollständige
switch
Anweisung auswählt , und (2) zu verlangen, dass die Übereinstimmung eine bestimmte Größe (Anzahl der Zeichen) hat.Mit Isearch + können Sie auch nach Übereinstimmungen mit mehreren Mustern suchen oder nach einer Übereinstimmung mit einem Muster innerhalb einer bestimmten Entfernung zu einer Übereinstimmung für ein anderes Muster ("nahe") suchen (wobei die Entfernung in Zeichen, Wörtern, Sexps, Listen, Sätzen gemessen wird. ..)
quelle
Dies zu posten, da es eine schwache Lösung ist, aber besser als nichts.
Anstatt das gesamte Verhalten von Emacs zu ändern, können Funktionen geschrieben werden, die nach jedem Vorgang ein erneutes Zeichnen erzwingen. Dadurch wird ein Hängen vermieden und das Scrollen reagiert schneller auf das Auf- und Abblättern von Seiten und das Mausrad.
quelle