Jak używać względnych numerów linii w trybie wiersza poleceń?

16

Ostatnio nauczyłem się od Practical Vim sposobu kopiowania lub przenoszenia bloku linii bez konieczności przesuwania kursora z bieżącej pozycji. Odbywa się to w trybie wiersza poleceń. na przykład

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

Chociaż podoba mi się to, pisanie długich linii jest kłopotliwe, szczególnie gdy plik ma zbyt wiele linii.

Czasami linie do przesuwania są względnie blisko kursora (ale nie chcę przesuwać kursora, szarpać, wracać tam, gdzie byłem, wklejać!). Byłoby wspaniale, gdybym mógł użyć liczb względnych, podobnie jak w trybie normalnym. To jak mówienie

przenieś tutaj 5 linii, które są 10 linii powyżej bieżącej linii

Krótko mówiąc, jak używać liczb względnych w trybie wiersza poleceń (podobnie jak w trybie normalnym)?

rpattabi
źródło

Odpowiedzi:

23

Zakładając, że linie rozciągają się od 15 do 10 linii powyżej bieżącej, możesz osiągnąć to, o co prosiłeś, używając względnych numerów linii:

:-10,-15m.

Niestety, określając zakres wstecz, Vim prosi o potwierdzenie, czy tego właśnie chciałeś. Aby uniknąć kroku potwierdzenia, możesz wpisać silentprzed poleceniem lub po prostu określić zakres do przodu:

:-15,-10m.

Jak można się spodziewać, +można go używać w odniesieniu do wierszy poniżej bieżącego.

Szczegółową pomoc można znaleźć w:

:help cmdline-ranges
joeytwiddle
źródło
1
Ale nigdy nie korzystałem z tej funkcji. Robię 15k d5j 10j P.
joeytwiddle
Różnica polega na tym, że 15k, 5j działa w trybie poleceń, a ten wyjaśniony w odpowiedzi jest w trybie wstawiania. Więc w oparciu o tryb możemy wybrać odpowiedni. Polecenia w trybie wstawiania są ogólnie kryteriami wyboru do uruchamiania innych poleceń.
Soundararajan
12

Możesz użyć twardych liczb w swoim zakresie:

:200,300command

Lub liczby względne:

:-27,+46command

Lub znaki ręczne:

:'a,'bcommand

Lub automatyczne znaki:

:'[,'>command

Lub wyszukuje:

:?foo?,/bar/command

Lub skróty linii:

:.,$command

Lub dowolna kombinacja powyższych sztuczek:

:?foo?,+46command
:'a,$command
...
romainl
źródło
3

Możesz użyć adresowania względnego (np. .-10,.+3) Z dowolną komendą Ex, cp. :help :range.

Alternatywnie, spójrz na moją wtyczkę LineJuggler ; zapewnia kilka krótkich odwzorowań do przesuwania linii lub ich powielania, a wszystkie te odwzorowania przyjmują względne przesunięcie linii jako [count].

Ingo Karkat
źródło