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 vibędą wiedzieć, yże polecenie „yank” - ciągnie (kopiuje) tekst określony następującą komendą ruchu. * W ten sposób yeciągnie się do końca słowa, y0cią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.
ddjest synonimem d_i usuwa całą bieżącą linię. Podobnie ccjest 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ą; yybędzie szarpać całą bieżącą linię tak jak y_.
Istnieje inny zestaw synonimów: Djest synonimem d$i usunie się z pozycji kursora do końca linii. Cjest synonimem c$i zmieni tekst z pozycji kursora na koniec linii, wprowadzając cię w tryb wstawiania, aby wpisać nowy tekst.
Jednakże, Yjest kolejnym synonimem yyalbo y_i szarpać całą linię , a nie tylko od kursora do końca linii, jak można oczekiwać od Ci Dwzoró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, Sjest innym synonimem dla cclub c_.