Wenn ich ein Makro mit aufzeichne q
und fertig bin, kann ich Folgendes eingeben:
q
um die Aufnahme zu beenden, wenn ich mich im normalen oder visuellen Modus befinde.<c-o>q
um die Aufnahme zu beenden, wenn ich mich im Einfügemodus befinde...
Wie stoppe ich die Aufzeichnung, wenn mein Makro im Befehlsmodus endet?
command-line
register
macro
iago-lito
quelle
quelle
:'<,'>s/toBeReplaced//g
und setzt dann den Cursor zwischen die beiden,//
sodass ich nur noch tippen mussnewString<cr>
und fertig bin. :)Antworten:
Eine andere Lösung ist, wenn Sie sich im Befehlszeilenmodus befinden
Ctrl-f
und drückenq
, um die Aufnahme zu stoppen.Ctrl-f
Ermöglicht das Öffnen des Befehlszeilenfensters, in dem Sie den Befehl im normalen Modus bearbeiten können. Verwenden Sie einfach die Eingabetaste, um den Befehl zu bestätigen.Deshalb, nachdem Sie etwas hinzugefügt haben:
In Ihrem
.vimrc
können Sie verwenden<c-q>
, um die Aufzeichnung eines Makros im Befehlsmodus zu beenden.Florent
quelle
^F
) noch vom Ende des Makros entfernen , oder? Zumindest sehe ich das so.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
und die Aufnahme wurde tatsächlich angehalten, während Sie den Befehlsteil eingegeben haben. So verwenden Sie das Makro:@qFINISHYOURCOMMAND<cr>
und fertig: Sie müssen es nicht bearbeiten. Leider scheint dies im visuellen Modus nicht zu funktionieren (oder es verliert die Auswahl) .. oder habe ich etwas verpasst?@q
und der Bereich wurde beim Befehlsstart hinzugefügt'<,'>
- solange das Makro mit:
... begann'<,'>
) bei der Bestätigung des Befehls immer noch mit der Auswahl übereinstimmen, auch wenn Sie Ihre Auswahl nicht sehen .Ein Weg, es zu tun:
qq
... andere Zeichen)ESC
um aus cmdline-Modus,q
das Makro zu beenden.ESC
aus Ihremq
Register (*): Sie können es in einen Puffer einfügen, das^[
Zeichen entfernen , das gesamte Material erneut auswählen (zeichenweise) und es zurückziehen, um es zu registrierenq
.@q
.Grundsätzlich "nachbearbeiten" Sie Ihr Makro ein wenig, da es in einem Register gespeichert ist :)
(*) Ein schneller Weg, um das letzte Zeichen aus einem im Register gespeicherten Makro zu entfernen,
q
wäre:quelle
:let @q = @q[:-2]
bitte ein bisschen mehr Details über die Leitung geben ? Vor allem wie funktioniert das[:-2]
? :-)@q
). Einige Beispiele hierNachdem Sie Ihren Kommentar zum Anwendungsfall gelesen haben, können Sie anscheinend eine Tastenzuordnung anstelle eines Makros verwenden.
Ich habe diese Zeile in meinem .vimrc (weiß nicht mehr, wo ich sie gefunden habe):
Dies hat einen ähnlichen Effekt wie der von Ihnen beschriebene Anwendungsfall. Sie müssen lediglich die Ersetzung eingeben und die Eingabetaste drücken. In diesem Fall werden jedoch alle Vorkommen des Wortes ersetzt, das sich unter Ihrem Cursor befand .
Um nur innerhalb des aktuellen Blocks zu ersetzen, sollte meiner Meinung nach Folgendes funktionieren:
Natürlich können Sie es jedem gewünschten Schlüssel zuordnen.
Was das Obige bewirkt: Markieren Sie die aktuelle Position mit dem unbenannten Marker, wählen Sie den aktuellen Block visuell aus, verlassen Sie den visuellen Modus und setzen Sie den Cursor wieder auf die gespeicherte Position (die visuellen Auswahlmarkierungen sind noch gesetzt), wechseln Sie in den Befehlsmodus und geben Sie den Ersatzbefehl ein , Einfügen des Wortes unter dem Cursor
<C-r><C-w>
und Positionieren des Cursors, um die Ersetzung einzugeben.quelle
toBeReplaced
Muster jedoch nicht so einfach wie "das Wort unter dem Cursor", weshalb ich ein kleines, spezifisches Makro benötige, das ich unterwegs erstellen kann. Und dann nochmal: zu spezifisch für eine Karte: \toBeReplaced
Teil zu erhalten (anstelle des aktuellen Wortes unter dem Cursor, was einschränkender ist).va{:s/<C-r>0//g<Left><Left>
Mit diesem können Sie jedes benötigte Muster vorab abziehen und dann einfach die zugeordnete Taste drücken, um dieses Muster durch etwas in der aktuellen zu ersetzen Block.