In diesem Artikel heißt es: "Emacs hat eine Wiederholung, weil Sie beim Rückgängigmachen die Richtung umkehren können, wodurch das Rückgängigmachen rückgängig gemacht wird."
Was bedeutet das? Wie kann ein Benutzer mit Emacs "wiederholen"?
In diesem Artikel heißt es: "Emacs hat eine Wiederholung, weil Sie beim Rückgängigmachen die Richtung umkehren können, wodurch das Rückgängigmachen rückgängig gemacht wird."
Was bedeutet das? Wie kann ein Benutzer mit Emacs "wiederholen"?
Antworten:
Kurzfassung: durch Rückgängigmachen des Rückgängigmachens. Wenn Sie rückgängig machen und dann einen nicht bearbeitenden Befehl ausführen, z. B. C-f, macht das nächste Rückgängigmachen das Rückgängigmachen rückgängig, was zu einem Wiederherstellen führt.
Längere Version:
Sie können sich das Rückgängigmachen als Vorgang für einen Stapel von Vorgängen vorstellen. Wenn Sie C-fnach einer Folge von Rückgängig-Vorgängen einen Befehl (auch einen Navigationsbefehl wie ) ausführen, werden alle Rückgängig-Vorgänge auf den Vorgangsstapel übertragen. Das nächste Rückgängigmachen macht also den letzten Befehl rückgängig. Angenommen, Sie haben eine Operationssequenz, die folgendermaßen aussieht:
Jetzt machst du rückgängig. Die letzte Aktion wird rückgängig gemacht, was zu der folgenden Liste führt:
Wenn Sie an dieser Stelle etwas anderes als Rückgängig machen, sagen wir, C-fsieht der Operationsstapel folgendermaßen aus:
Wenn Sie jetzt rückgängig machen, ist das erste, was rückgängig gemacht wird, das Rückgängigmachen. Ergebnis in Ihrem ursprünglichen Stapel (und Dokumentstatus):
Wenn Sie einen Änderungsbefehl ausführen, um die Rückgängig-Sequenz zu unterbrechen, wird dieser Befehl nach dem Rückgängigmachen hinzugefügt und ist daher das erste, was danach rückgängig gemacht wird. Angenommen, Sie haben einen Abstand zwischen "Balken", anstatt zu schlagen C-f. Dann hättest du gehabt
Dieses Hinzufügen / erneute Hinzufügen erfolgt ad infinitum. Es ist etwas gewöhnungsbedürftig, aber es gibt Emacs wirklich einen hochflexiblen und leistungsstarken Rückgängig- / Wiederherstellungsmechanismus.
Rückgängig machen: C-_
So wiederholen Sie nach dem Rückgängigmachen: C-g C-_
Geben Sie mehrmals ein C-_ , um das zu wiederholen, was durch rückgängig gemacht wurde. C-_ Um einen emacs-Befehl mehrmals zu wiederholen , führen Sie Ihren Befehl aus, geben Sie ihn ein C-xzund geben Sie dann mehrmals die zTaste ein, um den Befehl zu wiederholen (interessant, wenn Sie ein Makro mehrmals ausführen möchten).
C-u
zum Beispiel auch verwenden C-u 8 *
(fügt acht * ein, wo sich das Caret befindet). Sie können also x Schritte C-u x C-_
rückgängig machen .
C-x e
) können Sie einfach e
so oft drücken, wie Sie es erneut ausführen müssen.
C-/
und C-x u
sind alternative Rückgängigmachen von Schlüsselbindungen, äquivalent zu C-_
. Ich bevorzuge, C-/
da es leichter zu schlagen ist.
C-g C-_
"nach einem Rückgängigmachen wiederholt" wird, gilt dies nur, wenn Sie die Kombination zum ersten Mal treffen. Wiederholen Sie danach Ihren Rückgängig-Schlüssel ohne C-g
. Geben Sie also dreimal nach dem Rückgängigmachen dreimal ein C-g C-_ C-_ C-_
. Wenn Sie tippen C-g C-_ C-g C-_ C-g C-_
, werden Sie nur im Kreis herumlaufen und Ihre Wiederholung rückgängig machen ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Beachten Sie, dass dies C-g
nicht wiederholt wird.C-g
C-/
C-g
C-/
C-/
Wenn Sie seit Ihrem letzten Rückgängig-Befehl eine beliebige Taste gedrückt haben (ob Sie Zeichen eingeben oder nur den Cursor bewegen), müssen Sie C-g
vor dem nächsten Rückgängigmachen / Wiederherstellen keine Eingabe vornehmen. C-g
ist nur eine sichere Taste zum Drücken, die nichts für sich tut, sondern als Nicht-Rückgängig-Taste zählt, um das Ende Ihrer Rückgängig-Sequenz zu signalisieren. Drücken Sie einen anderen Befehl, der C-f
auch funktionieren würde. Es ist nur so, dass es den Cursor von der Stelle bewegt, an der Sie ihn hatten.
Wenn Sie einen C-g
anderen Befehl drücken, als Sie es nicht wollten, und jetzt in die falsche Richtung C-g
rückgängig machen, drücken Sie einfach , um Ihre Richtung erneut umzukehren. Sie müssen Ihre versehentlichen Wiederherstellungen und Rückgängigmachungen vollständig rückgängig machen, bevor Sie zu den gewünschten Rückgängigmachungen gelangen. Wenn Sie jedoch weiter schlagen C-/
, erreichen Sie schließlich den gewünschten Status. Tatsächlich ist jeder Zustand, in dem sich der Puffer jemals befand, erreichbar, wenn Sie C-g
einmal drücken und dann C-/
genügend oft drücken .
Alternative Verknüpfungen für undo
andere als C-/
sind C-_
, C-x u
und M-x
undo
.
Weitere Informationen zum Rückgängig-System von Emacs finden Sie unter Rückgängig im Emacs-Handbuch.
Für diejenigen, die die allgemeinere Funktion zum Rückgängigmachen / Wiederherstellen verwenden möchten, hat jemand geschrieben undo-tree.el
. Es bietet das Erscheinungsbild von Nicht-Emacs-Rückgängigmachungen, bietet jedoch Zugriff auf den gesamten "Baum" der Rückgängig-Geschichte.
Ich mag das in Emacs integrierte Rückgängig-System, finde dieses Paket jedoch sehr intuitiv.
Hier ist der Kommentar aus der Datei selbst:
Emacs verfügt über ein leistungsstarkes Rückgängig-System. Im Gegensatz zum Standard-Rückgängig / Wiederherstellen-System in den meisten Programmen können Sie damit jeden früheren Status eines Puffers wiederherstellen (während das Standard-Rückgängig / Wiederherstellen-System frühere Zustände verlieren kann, sobald Sie das Wiederherstellen durchführen). Diese Leistung hat jedoch ihren Preis: Viele Leute finden das Rückgängig-System von Emacs verwirrend und schwierig zu bedienen, und es entstehen eine Reihe von Paketen, die es durch das weniger leistungsstarke, aber intuitivere Rückgängig- / Wiederherstellungssystem ersetzen.
Sowohl der Datenverlust beim Standard-Rückgängigmachen / Wiederherstellen als auch die Verwirrung beim Rückgängigmachen von Emacs resultieren aus dem Versuch, den Rückgängig-Verlauf als lineare Folge von Änderungen zu behandeln. Es ist nicht. Der in diesem Paket bereitgestellte Undo-Tree-Modus ersetzt das Undo-System von Emacs durch ein System, das den Undo-Verlauf als das behandelt, was er ist: einen verzweigten Baum von Änderungen. Diese einfache Idee ermöglicht es, das intuitivere Verhalten des Standard-Rückgängig- / Wiederherstellungssystems mit der Fähigkeit zu kombinieren, niemals einen Verlauf zu verlieren. Ein zusätzlicher Nebeneffekt ist, dass der Rückgängig-Verlauf in einigen Fällen effizienter gespeichert werden kann, sodass sich mehr Änderungen ansammeln können, bevor Emacs den Verlauf verwirft.
Hüten Sie sich vor einer Undo-Tree- Eigenart zum Wiederherstellen !
Viele beliebte „Starter-Kits“ (Vorspiel, Purcell, Spacemacs) werden mit Undo-Tree geliefert. Die meisten (alle?) Aktivieren es sogar automatisch. Wie bereits erwähnt, ist der Undo-Baum eine praktische Möglichkeit, den Undo / Redo-Baum zu visualisieren und zu durchlaufen. Prelude gibt ihm sogar einen Key-Akkord ( uu
) und auch C-x u
.
Das Problem ist: Undo-Tree scheint Emacs 'Standardbindung und bekannte Bindung für Redo zu zerstören :C-g C-/
.
Stattdessen können Sie diese symmetrischen Tasten zum Rückgängigmachen / Wiederherstellen verwenden :
C-/ undo
C-S-/ redo
Diese sind nützlich, da Sie manchmal schnell wiederholen möchten, ohne den Visualizer zu öffnen.
Ich finde es redo.el
äußerst praktisch , "normales" Rückgängigmachen / Wiederherstellen durchzuführen, und ich binde es normalerweise an CSz und rückgängig machen an Cz, wie folgt:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Laden Sie einfach die Datei herunter, fügen Sie sie in Ihren Lisp-Pfad ein und fügen Sie die oben genannten Dateien in Ihren ein .emacs
.
Emacs 28 fügt einen Wiederherstellungsbefehl (aufgerufen undo-redo
) hinzu.
Wenn Sie ein typischeres Rückgängigmachen / Wiederherstellen wünschen, können die folgenden Befehle verwendet werden.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Standardmäßig muss für das Wiederherstellen in Emacs Cg gedrückt und dann rückgängig gemacht werden.
Es ist jedoch möglich, das in Emacs integrierte Rückgängigmachen zu verwenden, um auch einen Wiederherstellungsbefehl zu implementieren.
Das Paket Undo-Fu verwendet die in Emacs integrierte Undo-Funktion, um sowohl Undo als auch Redo verfügbar zu machen.