Wie verwende ich relative Zeilennummern im Befehlszeilenmodus?

16

Kürzlich habe ich von Practical Vim gelernt, wie man Zeilenblöcke kopiert oder verschiebt, ohne den Cursor von der aktuellen Position bewegen zu müssen. Dies erfolgt im Befehlszeilenmodus. z.B

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Obwohl es mir gefällt, ist es schwierig, die langen Zeilennummern einzugeben, insbesondere wenn die Datei zu viele Zeilen enthält.

Manchmal sind die zu bewegenden Linien relativ nahe am Cursor (aber ich möchte meinen Cursor nicht bewegen, ruck, komm zurück, wo ich war, einfügen!). Es wäre großartig, wenn ich relative Zahlen verwenden könnte, ähnlich wie im normalen Modus. Es ist wie zu sagen

Verschieben Sie 5 Zeilen, die 10 Zeilen über der aktuellen Zeile liegen, hierher

Kurz gesagt, wie verwende ich relative Zahlen im Befehlszeilenmodus (ähnlich wie im normalen Modus)?

rpattabi
quelle

Antworten:

23

Angenommen, Ihre Zeilen erstrecken sich von 15 bis 10 Zeilen über die aktuelle, können Sie mit relativen Zeilennummern erreichen, was Sie angefordert haben:

:-10,-15m.

Wenn Sie einen Rückwärtsbereich angeben, werden Sie von Vim leider aufgefordert, zu bestätigen, ob dies das ist, was Sie wirklich wollten. Um den Bestätigungsschritt zu vermeiden, können Sie silentvor Ihrem Befehl Folgendes eingeben oder einfach einen Vorwärtsbereich angeben:

:-15,-10m.

Wie Sie vielleicht erwarten, +kann verwendet werden, um auf Zeilen unterhalb der aktuellen zu verweisen.

Detaillierte Hilfe finden Sie bei:

:help cmdline-ranges
joeytwiddle
quelle
1
Aber ich habe diese Funktion noch nie benutzt. Ich tun 15k d5j 10j P.
Joeytwiddle
Der Unterschied besteht darin, dass 15k, 5j im Befehlsmodus arbeiten und der in der Antwort erläuterte im Einfügemodus. Je nach Modus können wir den passenden auswählen. Die Befehle im Einfügemodus sind im Allgemeinen die Auswahlkriterien für die Ausführung anderer Befehle.
Soundararajan
12

Sie können feste Zahlen in Ihrem Bereich verwenden:

:200,300command

Oder relative Zahlen:

:-27,+46command

Oder manuelle Markierungen:

:'a,'bcommand

Oder automatische Marken:

:'[,'>command

Oder sucht:

:?foo?,/bar/command

Oder Zeilenverknüpfungen:

:.,$command

Oder eine beliebige Kombination der oben genannten Tricks:

:?foo?,+46command
:'a,$command
...
romainl
quelle
3

Sie können die relative Adressierung (z. B. .-10,.+3) mit jedem Ex-Befehl verwenden, vgl. :help :range.

Alternativ können Sie sich auch mein LineJuggler-Plugin ansehen . Es bietet mehrere kurze Zuordnungen, um Linien zu verschieben oder zu duplizieren. Alle diese Zuordnungen haben einen relativen Zeilenversatz von [count].

Ingo Karkat
quelle