Dlaczego polecenie podkreślenia _ jest przydatne?

15

Jestem nieco zdziwiony, dlaczego polecenie podkreślenia _, które przeskakuje na początek (COUNT - 1) linii poniżej kursora, dostaje swój własny klucz. Kiedy powinienem użyć tego zamiast +lub ^?

Toothrot
źródło

Odpowiedzi:

16

Dobre pytanie!

Sam ruch, masz rację, _nie jest szczególnie przydatnym kluczem.:h _

                            *_*
_  <underscore>     [count] - 1 lines downward, on the first non-blank
            character |linewise|.

Kluczowym słowem jest tutaj „linewise”. Tak więc, jeśli twoim celem jest po prostu przesunąć kursor, a następnie ^, ji +wszystko to zadanie, i nie ma sensu się _. Ale jako argument dla operatora _jest super potężny.

Wiele podwójnych skrótów klawiszowych to tak naprawdę tylko skróty _. Na przykład,

dd -> d_
cc -> c_
yy -> y_
Y  -> y_

itp. Ponieważ jest to ruch liniowy, w zasadzie wybiera całą linię, na której ma być obsługiwany, niezależnie od tego, gdzie zaczyna się kursor, podczas gdy ^po prostu przechodzi od twojej postaci do pierwszego niepustego.

Pomaga mi, gdy myślę o liniach w porównaniu do ruchów blokowych, wyobrazić sobie, że naciskam jeden vlub Vtuż przed ruchem. Więc wyobrażam sobie, że jestem d^równoważny v^di wyobrażam sobie, że jestem d_równoważny z V_dlub V^d. Oczywiście można również przesłonić ruch, aby wymusić na nim liniowość lub charakter. Tak dv_jest w rzeczywistości dokładnie taka sama jak d^lub v^d, i dVwjest jak Vwdco jest dokładnie jak d_.

Powodem, dla którego jest to konkretnie „linia nr 1”, jest to, że 1dd(która jest naprawdę d1_) usuwa jedną całą linię, 2dd(która jest naprawdę d2_) usuwa 2 całe linie, 3ddusuwa 3 całe linie itp.

DJMcMayhem
źródło
1
W porządku, ale czy kiedykolwiek z niego skorzystam? ddjest łatwiejsze niż d_i 3yjjest łatwiejsze niż 4y_.
Toothrot,
5
@toothrot Jeśli tworzysz własnego operatora i chcesz operować na kolejnych n liniach.
DJMcMayhem
5
@Toothrot Chyba chcę to trochę wyjaśnić. W codziennej edycji vima, nie, to naprawdę nie jest szczególnie przydatne. Prawie nigdy tego nie używałem. Jest to użyteczne, ponieważ jest to definicja wielu użytecznych poleceń. ddmoże być wygodniejsze niż d_, ale to dlatego, że ddjest to tylko mapowanie do d_. Jest także przydatny w vimscript.
DJMcMayhem
9
Niektóre działania, które działają na „ruch”, mogą nie mieć innych skrótów. Coś w rodzaju „gU_” spowoduje pisanie wielkimi literami wszystkiego w bieżącym wierszu, nawet jeśli kursor nie znajduje się na początku wiersza.
bmb
1
@bmb Co z gUU? Myślę, że warto znaleźć rzeczywisty przykład, w którym <operator>_zostałby zastosowany.
Hotschke