So geben Sie einem Vim-Befehlszeilenbefehl eine Zählung zu (wie etwa :insert, :normal usw.)

So geben Sie einem Vim-Befehlszeilenbefehl eine Zählung zu (wie etwa :insert, :normal usw.)

Wie Sie wahrscheinlich alle wissen, ist es in Vim möglich, Befehlen im „Normalmodus“ eine Anzahl zuzuweisen, indem man ihnen eine Zahl voranstellt.

Dadurch werden beispielsweise 4dd4 Zeilen gelöscht.

Ich frage mich, ob es eine Möglichkeit gibt, eine Zählung an einen Vim-Befehlszeilenbefehl (einen Befehl, der mit einem Doppelpunkt beginnt) zu übergeben, um ihn mehrmals zu wiederholen.

Etwa so: 2:normal oHi!Den Befehl 2 Mal wiederholen normal oHi!.

Gibt es eine Möglichkeit, so etwas in Vim zu tun?

Antwort1

Viele :-Befehle akzeptieren eine Anzahl als Argument. Zum Beispiel:

:delete 4

Würde vier Zeilen löschen, beginnend mit der Zeile, auf der sich der Cursor befindet.

Einige :-Befehle verwenden stattdessen eine Anzahl vor dem Befehlsnamen:

:2next

Würde die vornächste Datei in der Argumentliste bearbeiten.

Der Befehl akzeptiert jedoch :normalin keiner der beiden Formen eine Zählung. Sie müssten ihn in eine Schleife einbinden:

for i in range(1,2)
    normal oHi!
endfor

Und natürlich können Sie einen benutzerdefinierten Befehl erstellen, der das gewünschte Ergebnis liefert:

command -count=1 -nargs=+ Normal for i in range(1,<count>) | exe 'normal ' . <q-args> | endfor

Dadurch -count=1wird der Standardzähler auf 1 gesetzt und Sie rufen es auf die zweite Art auf:

:2Normal oHi!

verwandte Informationen