Klassischer Anwendungsfall:
- Sie beginnen mit der Aufnahme eines Makros:
C-x (
- Du machst ein paar Sachen, sagen wir mal
hello
. - Sie führen einen Befehl aus, der einen Fehler auslöst,
C-g
z. B. (z. B. Sie führen versehentlich einen Fehler ausC-s
und müssen diesen abbrechenC-g
, jetzt ist Ihre Arbeit verloren).
Jetzt ist Ihre bisherige Aufnahme verloren.
Ich möchte dort weitermachen, wo ich aufgehört habe, bevor ich einen Befehl ausgeführt habe, der meine Aufnahme unterbrochen hat. Ich habe es angeschaut C-h f start-kbd-macro
, aber es ist in C geschrieben, also kann ich es nicht optimieren. Ich habe auch nach einer Variablen wie gesucht current-kbd-macro
, aber bisher keine gefunden.
Kann es wiederhergestellt werden?
Aktualisieren:
Ich konnte nicht herausfinden, warum C-u C-x (
ich nicht arbeitete, aber ich habe festgestellt, dass ich damit getestet habe C-g
.
Es stellt sich heraus, dass dies etwas C-g
Besonderes ist - wenn Sie eine andere Art von Fehler auslösen, z
C-x ( M-: (signal 'quit nil)
Dann stoppt dies die Aufnahme, last-kbd-macro
enthält "M-: M-( signal 'quit nil"
aber, aber mit
C-x ( C-g
Dies stoppt die Aufnahme und verwirft alles, was aufgezeichnet wurde. Als Cg-glücklicher Benutzer (wie mindestens zwei meiner Freunde) ist dies eine ziemlich unglückliche Unterscheidung. Ich habe versucht zu bearbeiten keyboard-quit
, aber ich kann dort nichts tun.
Es sieht so aus, als ob die einzige Möglichkeit, dies wiederherzustellen, darin besteht, recent-keys
automatisch herauszufinden, wo ein Start-KBD-Makro (oder ähnliches) aufgerufen wurde, wie in kmacro-edit-lossage
.
quelle
Execute
kmacro-start-macro-or-insert-counter
mit Prefix (C-u
) zum vorhergehenden Makroanzuhängen.quelle
C-u C-u
) setzt sowohl dasAPPEND
als auch dieNO-EXEC
Argumente aufstart-kbd-macro
, sodass Sie ohne die anfängliche Wiedergabe des Makros bis jetzt anhängen können . Dieses Verhalten ist jedoch im Handbuch dokumentiert:(emacs) Basic Keyboard Macro
Die Kombination der guten Antworten von stsquad und artagnon ergibt (meiner Meinung nach) eine Gesamtlösung für das Problem, die völlig vernünftig ist:
Möglicherweise ist die Notwendigkeit, den Verlust als Makro zu bearbeiten, nicht ideal , aber (a) Sie mussten das Makro unabhängig davon bearbeiten, unabhängig davon, ob Sie die Aufnahme abgebrochen haben, und (b) dies sollte nicht sehr oft vorkommen. Wenn Sie sich nur daran erinnern, wie Sie das Makro normal stoppen können (z. B. mit <f4>statt C-g).
Nichts davon bedeutet, dass es nicht nützlich wäre, wenn das abgebrochene Makro irgendwo gespeichert würde. Es ist nur so, dass ich nicht glaube, dass dies tatsächlich passiert. Es wäre wahrscheinlich wert M-x
report-emacs-bug
, diese Funktion vorzuschlagen.quelle
Die kanonische Lösung ist C-x C-k C-e(
kmacro-edit-macro
), mit der Sie jeden Tastendruck durchlaufen und alles einfügen / löschen können, was Sie möchten. Die Befehlssyntax für den Editor ist etwas knapp,?
zeigt jedoch eine Anleitung an. Es gibt einen natürlicheren Editor, der an C-x C-k e(edit-kbd-macro
) gebunden ist und einen Nur-Text-Makro-Editor mit Kommentaren liefert.Eine andere Option ist, mit M-x
insert-kbd-macro
der Sie das Makro als Lisp bearbeiten können, aber es ist nicht die am besten lesbare Sache der Welt.Was Variablen betrifft, suchen Sie nach
last-kbd-macro
undkmacro-ring
.Wie Sie bereits erwähnt haben, haben Sie Ihr Makro noch nicht fertiggestellt. Sie können es einfach aus Ihrem Verlust erstellen. C-x C-k e C-h lund löschen Sie bis zu 300 vorhergehende Zeichen.
quelle
last-kbd-macro
nochkmacro-ring
enthalten die zuvor gedrückten TastenC-g
oder ein Fehler ist aufgetreten. Ich habe INCOMPLETE in meinem Titel ausdrücklich in Großbuchstaben gesetzt, um solche schlechten Antworten zu erwarten. Vielen Dank, dass Sie versucht haben zu helfen.C-x C-k e C-h l
, bearbeitenC-c C-c
, dannC-u f3
auf die Aufnahme zu tragen ( unter Hinweis darauf , dass das letztef3
wird zunächst spielen die Makro so weit vor Erwartung weiterer Eingang). Möglicherweise ist die Notwendigkeit, den Verlust als Makro zu bearbeiten, nicht ideal , aber (a) Sie mussten das Makro unabhängig davon bearbeiten, unabhängig davon, ob Sie die Aufnahme abgebrochen haben, und (b) dies sollte nicht sehr oft vorkommen. Wenn Sie sich nur daran erinnern, wie Sie das Makro normal stoppen können.