Wiederholen Sie den letzten Normalmodus-Befehl einschließlich der Bewegungen in Vim

25

In Vim kann .ich mit den letzten Normalmodus-Befehl wiederholen. beispielsweise:

dd.

löscht eine Zeile zweimal.
Aber wenn ich tippe

5j.

Der Cursor bewegt sich nicht 10 Zeilen nach unten. Wie wiederhole ich den letzten Normalmodusbefehl, insbesondere einen Zug?

Juan Pablo
quelle

Antworten:

14

vimtut dies leider nicht. Das Beste, was Sie tun können, ist das Plugin repmo.vim zu installieren , das Bewegungsbefehle mit einer Zählung wiederholt.

Paul
quelle
11

es ist sogar in Vanille Vim machbar, aber die Anwendbarkeit hängt von Ihrem Anwendungsfall ab, dh. Wie oft müssen Sie es wiederholen?


Option 1: Verwandeln Sie es in einen Befehlsmodus

Am Beispiel von 5 Zeilen nach unten können Sie Folgendes tun:

  1. Enter :norm 5j, es bewegt den Cursor 5 Zeilen nach unten
  2. Verwenden Sie @:, um die Bewegung zu wiederholen

:norm steht für normal, jede folgende Zeichenfolge wird im normalen Modus als Tastendruck betrachtet


Option 2: Makro verwenden

  1. qa(speichere Makro in Register a, du kannst dein eigenes Register wählen wie qb, qc)
  2. 5j
  3. q (Aufnahme beenden Makro)
  4. @awiederholen Sie Ihre aufgenommenen Betrieb (ersetzen amit dem Registernamen Sie ausgewählt, z. B. @b, @c)

Das Einrichten eines Makros erfordert mehr geistige Kraft, ist jedoch in dem Sinne wiederholbar, dass Sie mehrere Operationen in verschiedenen Registern speichern können, ohne von den neuesten Operationen überschrieben zu werden.

JK ABC
quelle
7

.Wiederholt tatsächlich die letzte Änderung , nicht den letzten Normalmodusbefehl. Wie Paul sagte, benötigen Sie ein Plugin, um Bewegungen wiederholen zu können.

Siehe " :help .".

Heptit
quelle
4

Sie können Änderungen mit wiederholen .. Bewegungen können mit dem ;Befehl wiederholt werden . Dieser Befehl scheint neu zu sein und ähnelt dem in anderen Antworten erwähnten Skript repmo.vim.

Um beispielsweise zum nächsten zu wechseln c, drücken Sie 2fc. Um es dann noch einmal zu machen, tippe einfach ;.

dreißigunddreißig
quelle
11
;ist nicht neu. Es ist ein Standard vi Befehl. Vi erinnert sich an den Typ und Zielzeichen (aber nicht numerische Argument) der letzten f/ F/ t/ TBewegung und ;wiederholt es. Es werden jedoch keine anderen Bewegungen wiederholt.
Pyrocrasty
Dies hat das erreicht, wonach ich gesucht habe! Danke dir. und danke @pyrocrasty für die Klarstellung!
Paul
0

Sie können die Zeilen auswählen, die Sie ändern möchten, und den letzten normalen Punktbefehl ausführen

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
SergioAraujo
quelle