47 Stimmen

Wie kann ich die letzten n Änderungen in Vim wiederholen?

Doing . wiederholt die letzte Änderung. Doing 2. wiederholt die letzte Änderung zwei Mal.

Aber stellen Sie sich vor, ich möchte die Änderung vor der letzten Änderung wiederholen. Wie mache ich das in Vim?

39voto

Fredrik Pihl Punkte 42950

Glaube nicht, dass du das kannst, siehe :help . Sie können jedoch ein Makro für Ihre Bearbeitungen aufzeichnen, wobei Sie aus einer Vielzahl von Registern wählen können {0-9a-zA-Z"} (Großbuchstaben zum Anhängen). Verwenden Sie dann z. B. @u für Bearbeitung 1, @t für Bearbeitung 2 und so weiter.

Tolle Tipps zum Thema Aufnahme von Die besten VIM-Tipps

" Recording (BEST TIP of ALL)
qq  # record to q
your complex series of commands
q   # end recording
@q to execute
@@ to Repeat
5@@ to Repeat 5 times
qQ@qq                             : Make an existing recording q recursive *N*
" editing a register/recording
"qp                               :display contents of register q (normal mode)
<ctrl-R>q                         :display contents of register q (insert mode)
" you can now see recording contents, edit as required
"qdd                              :put changed contacts back into q
@q                                :execute recording/register q

Hier finden Sie weitere Tipps zum Wiederholen:

:&     last substitute
:%&    last substitute every line
:%&gic last substitute every line confirm
g%     normal mode repeat last substitute
g&     last substitute on all lines
@@     last recording
@:     last command-mode command
:!!    last :! command
:~     last substitute
:help repeating

10voto

joeytwiddle Punkte 26603

Ich schrieb das RepeatLast.vim-Plugin um genau diese Anforderung zu erfüllen. Es bietet eine 5\. Bindung der Taste, um die letzten 5 Änderungen (einschließlich Bewegungen) zu wiederholen und 2\D um die letzten 2 Aktionen fallen zu lassen/zu vergessen.

Es funktioniert durch Aktivierung der Makroaufzeichnung die ganze Zeit was vielleicht nicht für jeden wünschenswert ist. Aber wenn man damit leben kann, funktioniert es in 99 % der Anwendungsfälle.

Neueste Version: https://github.com/joeytwiddle/RepeatLast.vim (Bitte um Rückmeldung!)

Vorbehalte:

Bitte :set ch=2 damit die erste Zeile der Ausgabe nicht von der Meldung "Aufnahme" verdeckt wird.

Die 1 % der Fälle, in denen es nicht wie vorgesehen funktioniert, sind in der Regel darauf zurückzuführen:

  1. Schwierigkeiten bei der langsamen Auslösung des CursorHold-Ereignisses ohne Verlust schnell wiederholte Tastenanschläge
  2. Unerwünschte Aufnahme von [Leerzeichen] und [Enter]-Tasten, wenn der Benutzer auf eine Eingabeaufforderung antwortet.

Schulung Ihrer q Muskelaufbau zur präventiven Aufzeichnung von Makros könnte auf lange Sicht ein besserer Ansatz sein ;-)

5voto

kojow7 Punkte 8897

In Anlehnung an die Antwort von Fredrick Phil, hier ein Beispiel:

Ihr Makro aufzeichnen

Im Folgenden wird gezeigt, wie man ein Makro aufzeichnet, das alles in und einschließlich einer Zeichenkette in Anführungszeichen löscht und in einem Register speichert d . Der Befehl zum Löschen einer Zeichenkette lautet da" . Um diesen Befehl im Makroregister d zu speichern, können wir also einfach Folgendes tun:

qdda"q

Beachten Sie, dass es mit einem q beginnt und endet. Das zweite Zeichen ist das Register, in diesem Fall d zum Löschen. Wir hätten aber auch einen beliebigen Buchstaben oder eine Zahl angeben können. Die übrigen Zeichen da" ist unser Befehl.

Mit unserem Makro

Nun, da unser Makro aufgezeichnet ist, können wir es mit dem @-Symbol, gefolgt von dem Register, aufrufen:

@d

Wiederholung des letzten Makrobefehls

Um den zuletzt aufgerufenen Makrobefehl erneut zu verwenden:

@@

Unverwandte Informationen:

In diesem Beispiel haben wir da" das steht für delete a quoted string . (Wenn Sie stattdessen alles löschen wollten inside die in Anführungszeichen gesetzte Zeichenkette, aber nicht die Anführungszeichen selbst, können Sie stattdessen verwenden di" statt.).

0voto

Deepam Gupta Punkte 1684

Ihre "Bearbeitungen" aufzeichnen

Ja! Sie können dies in Vim tun!

Eine der nützlichsten Eigenschaften von Vim ist seine Fähigkeit, das, was Sie tippen, zur späteren Wiedergabe aufzuzeichnen. Dies ist besonders nützlich für sich wiederholende Aufgaben, die nicht einfach mit .

An Aufnahme starten

  • Presse q im normalen Modus, gefolgt von einem Buchstaben ( a zu z )
    • Damit beginnt die Aufzeichnung der Tastenanschläge in dem angegebenen Register. Vim zeigt die Aufnahme in der Statuszeile an
    • Geben Sie beliebige Befehle im normalen Modus ein, oder rufen Sie den Einfügemodus auf und geben Sie Text ein

An Aufnahme stoppen

  • Beendigung im normalen Modus , schalten Sie in den Normalmodus um, wenn dies nicht der Fall ist, und drücken Sie q
  • Beendigung im Einfügemodus , drücken Ctrl + O Dies bringt Sie vorübergehend in den normalen Modus, und drücken Sie dann q

An Wiedergabe Ihrer Tastenanschläge/Aufnahmen

  • Presse kbd>@</kbd gefolgt von dem zuvor gewählten Buchstaben
  • Tippen kbd>@@</kbd Wiederholt die letzte Wiedergabe

Referenzen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X