Czy ma to jakiś konkretny historyczny powód?
Tło - (możesz pominąć tę część, jeśli już rozumiesz pytanie).
Użytkownicy pośredni / zaawansowani vi
będą wiedzieć, y
że polecenie „yank” - ciągnie (kopiuje) tekst określony następującą komendą ruchu. * W ten sposób ye
ciągnie się do końca słowa, y0
ciągnie się od pozycji kursora do początku linii, y_
szarpa całą bieżącą linię, y$
szarpa od pozycji kursora do końca bieżącej linii itp.
Polecenia d
(usuń) i c
(zmień) można używać jednocześnie ze wszystkimi tymi ruchami.
dd
jest synonimem d_
i usuwa całą bieżącą linię. Podobnie cc
jest synonimem c_
i zmieni bieżący wiersz (tj. Usunie cały tekst i przejdzie w tryb wstawiania na początku wiersza). **
Polecenie „szarpnięcie” jest zgodne z tą konwencją; yy
będzie szarpać całą bieżącą linię tak jak y_
.
Istnieje inny zestaw synonimów: D
jest synonimem d$
i usunie się z pozycji kursora do końca linii. C
jest synonimem c$
i zmieni tekst z pozycji kursora na koniec linii, wprowadzając cię w tryb wstawiania, aby wpisać nowy tekst.
Jednakże, Y
jest kolejnym synonimem yy
albo y_
i szarpać całą linię , a nie tylko od kursora do końca linii, jak można oczekiwać od C
i D
wzorów.
Rozumiem, że w Vimie tak zostało zachowane, aby zachować wsteczną kompatybilność vi
, jak wspomniano w pomocy Vima pod :help Y
:
Jeśli podoba Ci się, że „Y” działa od kursora do końca linii (co jest bardziej logiczne, ale niezgodne z Vi), użyj „: map Y y $”.
To jest pozostałość po vi
. W porządku.
Ale dlaczego w ogóle tak zaprojektowano polecenie? Czy była w tym jakaś logika?
* W szczególności umieszcza tekst w rejestrze 0 i wskazuje rejestr bez nazwy na rejestr 0.
** Chociaż nie ma to związku z moim pytaniem, S
jest innym synonimem dla cc
lub c_
.