Hinweis: Ich gehe davon aus, dass Sie das a
Register für die gesamte Antwort verwenden, aber Sie können jedes Register verwenden
Anmerkung2: <1b>
ist Esc; Sie können dies mit Ctrl+vund dann einfügen Esc. Es kann auch angezeigt werden als ^[
(abhängig von der display
Einstellung).
Es ist keine Zuordnung; Es macht also Sinn, dass :map
das nicht funktioniert. Es ist in einem Register aufgezeichnet, und Sie können es wie jedes Register anzeigen und bearbeiten.
Alles, was Sie qtun müssen, ist, "dieses Register zu löschen und einen beliebigen Tastendruck daran anzuhängen" , und alles, was Sie @tun müssen, ist "ein Register als Befehle auszuwerten" .
Es gibt nichts "anderes" an einem Makro, Sie können jedes Register als Makro aufrufen.
Zum Anschauen einfach benutzen:
:echo @a
Genau wie bei jedem Register.
Sie können auch verwenden :registers
, um alle Register anzuzeigen.
Zum Bearbeiten können Sie verschiedene Dinge tun:
Der einfachste Weg, dem Sie etwas zuweisen können, @a
ist:
:let @a='iasd<1b>'
Dies startet den Einfügemodus ( i
), das Einfügen asd
und die Rückkehr zum normalen Modus.
Dies ist für umfangreiche Bearbeitungen nicht sehr nützlich. Sie könnten Funktionen verwenden (zB substitute()
) oder vielleicht etwas anhängen ( :let @a=@a . 'more'
), aber etwas in der Mitte zu ändern ist nicht so einfach.
Ich habe herausgefunden, dass der beste Weg dafür ist, einen neuen Puffer mit :split
oder zu starten :tabnew
und das Register zu bearbeiten, indem es dort eingefügt, bearbeitet und dann zurückkopiert wird.
Sie können verwenden, "apwelche den Text in den Puffer einfügen (wo a
ist Ihr Register):
iThis is A<1b>
Jetzt kann ich nur die Zeile ändern, um vielleicht:
iThis is an edited macro<1b>
Dann ^v$"ayziehe ich diese Zeile in das a
Register:
- ^ für den Zeilenanfang
- v für den visuellen Modus
- $ für Zeilenende
- "ay Ziehen Sie die Auswahl zur Registrierung
a
Wenn Sie möchten, können Sie dies tun, ohne den visuellen Modus mit zu verwenden ^"ay$.
Sie können jetzt verwenden @a, als ob dies das ist, was Sie ursprünglich aufgenommen haben.
Sie können auch einfach yyund dann verwenden @", was ein bisschen schneller ist. Dies kopiert jedoch auch die nachfolgende Newline und kann zu Nebenwirkungen führen. Eine andere Möglichkeit, dies zu beschleunigen, ist die Verwendung eines Makros :-)
Enter
am Ende Ihrer Aufnahme gedrückt . In vielen Fällen mag dies harmlos sein, aber in Szenarien, in denen Sie die Cursorposition am Ende der Aufzeichnung sorgfältig festgelegt haben, kann dies die Wiederholbarkeit beeinträchtigen.v
die gesamte Zeile (ohne die neue Zeile) verwenden und auswählen.v^$"ay
um diese Zeile in dasa
Register zu kopieren ." Sollte das nicht^
vor dem kommenv
, und mit$
kopierst du nicht immer noch die neue Zeile? Ich denke, es sollte sein:0v$h"ay
(ja schmerzhaft lange!)$
bewegt sich an das Ende der Zeile, enthält jedoch nicht die neue Zeile. Es ist der Unterschied zwischen0y$
undyy
. Das Setzenh
nach$
würde nur bedeuten, dass Sie das letzte Zeichen vermissen würden.Um etwas zum Arbeiten zu bringen ...
Startet die Aufzeichnung eines Makros im
a
Register.Mit dem
:reg
Befehl können Sie viele Ihrer aktuellen Register anzeigen (die für Makros, Reißen, Löschen usw. verwendet werden) , oder Sie können ein anzuzeigendes Register angeben, indem Sie seinen Namen angeben. Zum Beispiel, um das Register anzuzeigena
:Ausbeuten
Sie können ein vorhandenes Namensregister mit dem entsprechenden Großbuchstaben anhängen. Dies funktioniert nicht nur zum Aufnehmen von Makros, sondern auch zum Ruckeln. Beispielsweise:
Ausbeuten
Wenn Sie die let-Syntax zum Bearbeiten eines vorhandenen Makros verwenden möchten, haben Sie folgende Möglichkeiten:
das wird zu erweitern
und Sie können dann die einzelnen Tastenanschläge ändern.
Beachten Sie, dass Sie die Tastenkombination
<C-r>
(d. H. Strg + r) verwenden können, um aus einem beliebigen Register in den Befehlszeilenmodus (oder in den Einfügemodus) einzufügen.Wenn Sie im Befehlszeilenmodus
<C-f>
Folgendes eingeben, wird außerdem das Befehlszeilenfenster geöffnet, in dem Sie frühere Befehle anzeigen / bearbeiten und Ihren aktuellen Befehl bearbeiten können, bevor Sie ihn aufrufen. Drücken Sie die Eingabetaste für den Befehl, den Sie senden möchten.Dies hat den Vorteil, dass Sie Ihre normalen Bewegungs- / Ersetzungsbefehle in diesem Puffer verwenden können, um Ihr Makro zu bearbeiten. Beispielsweise:
wird bringen:
Wenn Sie Befehl 120 ausführen, können Sie Folgendes tun:
Ausbeuten
Sie können natürlich den Inhalt des Registers in Ihren Puffer einfügen und dort ändern. Sie können jedoch alles tun, ohne den Arbeitspuffer zu verschmutzen.
quelle