Wie kann ich die Aufnahme eines Makros in Vim abbrechen?

9

Stellen Sie sich vor, ich hätte ein Makro aufgenommen und dann gelegentlich begonnen, ein Makro in dasselbe Register aufzunehmen. Kann ich die Aufnahme unterbrechen, damit das ursprüngliche Makro im Register erhalten bleibt?

Ich weiß, dass ich :let @b=@adas Makro von Register a nach Register b kopieren und somit beibehalten kann, aber vielleicht gibt es einen einfacheren Weg?

Alexey
quelle

Antworten:

7

Wenn Sie ein Makro aufzeichnen, wird das Register zuerst geleert und gefüllt, sodass es sehr unwahrscheinlich ist, dass es eine integrierte Möglichkeit gibt, Ihr vorheriges Makro zu speichern, während Sie sich in der Mitte einer anderen Aufzeichnung befinden. Ein Weg, bei dem kein Wrapper herumgeschrieben qwird.

Ich und viele Leute verwenden ein temporäres Register ( @qzum Beispiel) für alle unsere einmaligen Aufnahmen. Vielleicht solltest du auch.

romainl
quelle
3
:let @b=@qfunktioniert definitiv, es ist also nicht wahr, dass das Register gelöscht wird, wenn Sie mit der Aufnahme eines Makros beginnen. Und ich benutze q register für einmalige Makros. Und es ist sehr wahrscheinlich, dass ich es gelegentlich überschreiben kann.
Alexey
Das Register wird beim ersten Tastendruck gelöscht. Wirst du den :let @b=@qTanz jedes Mal machen, wenn du ein einmaliges Makro aufnehmen willst? Das habe ich mit meiner "Wrapper" -Idee angedeutet: Schreiben Sie eine kurze Zuordnung, die bei @qjedem Treffer gesichert wird qq. Es ist sehr leicht. Es gibt jedoch keinen integrierten Befehl "Aufzeichnen und Sichern".
Romainl
1
Vielleicht hat sich dieses Verhalten geändert, ich habe es mit vim 7.4 getestet und das Register ist verfügbar, bis ich qdas zweite Mal drücke . Also :let @b=@aist imho die bisher beste Antwort.
Trendfischer
Ich mag es, qmweil ich mich mit der Mnemonik re q ord m acro daran erinnere .
Walf
6

Wie von @Trendfischer in seinem Kommentar festgestellt, besteht das aktuelle Verhalten von vim nicht mehr darin, das Register beim ersten Drücken von zu leeren q.

Wenn Sie das falsche Register ausgewählt haben, können Sie Folgendes tun:

  • Beenden Sie den Aufnahmemodus nicht (vorerst).
  • eine leere Zeile erstellen,
  • Fügen Sie das Register ein, das Sie überschreiben (wenn Sie im qRegister aufnehmen, ist es "qp),
  • Beenden Sie jetzt den Aufnahmemodus ( q)
  • Wählen Sie die Zeile aus, die Sie oben eingefügt haben (ohne Zeilenende-Markierung : 0v$h; nicht verwenden V)
  • Ziehen Sie es in das Register, das Sie überschrieben haben ( "qywenn Sie das qRegister verwenden; wieder: Verwenden Sie nicht die zeilenweise Kopie Y).
  • Jetzt haben Sie Ihr altes Makro wieder im Register und können die Aufzeichnung Ihres neuen Makros im richtigen Register neu starten.

Natürlich können Sie mit ein wenig Aufwand sowohl das alte als auch das neue Makro retten (aber Sie müssen den Vorgang starten, bevor Sie das zweite Mal auf drücken q): Fügen Sie einfach das ein, was Sie aufgenommen haben, und ziehen Sie das "neue" / ". rechts "registrieren.

Ale
quelle