Dlaczego Y jest synonimem yy zamiast y $?

28

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_.

Dzika karta
źródło
3
Nie jestem pewien, dlaczego tak się stało. Będziesz musiał zapytać o to Billa Joya. Są jednak szanse, że jest to logiczny błąd, który po prostu nigdy nie został naprawiony w oryginalnej vi, a następnie trafił do wszystkich klonów i dlatego w końcu został zażądany przez POSIX.
Christian Brabandt
3
Jeśli kiedykolwiek znajdziesz odpowiedź, potrzebują jej również tutaj . ;)
joeytwiddle
1
Wątpię, żeby to był prawdziwy powód, ale osoba, która sprzeciwiła się zmianie mapowania Y w vim-sensible, argumentowała, że ​​jako programista C zwykli szarpać na końcu linii znacznie więcej niż szarpaniem całej linii, a zatem domyślne odwzorowania są dobre. YMMV: mój z pewnością tak.
Bogaty

Odpowiedzi:

16

Znalazłem artykuł „Wprowadzenie do edycji z Vi” Williama Joya (twórcy vi) i Marka Hortona (opiekun vi od 1979 r.).

Z papieru jasno wynika, że ​​domyślne zachowanie Y nie jest błędem, lecz pożądaną cechą. W sekcji „Zmiana układu i powielanie tekstu” wspominają o tym:

Try the command YP. This makes a copy of the current line 
and leaves you on this copy, which is placed before the current line. 
The command Y is a convenient abbreviation for yy. 
The command Yp will also make a copy of the current line, 
and place it after the current line. 
You can give Y a count of lines to yank, and thus duplicate 
several lines try 3YP.

Później na liście poleceń (patrz załącznik w wersji pdf ) opis Y jest następujący:

Y  Yanks a copy of the current line into the unnamed buffer, 
   to be put back by a later p or P; a very useful synonym for yy.

W ten sposób jestem pewien, że Y było cechą, a nie błędem.

Co do niezgodności z - Di Cja też mam logiczne wytłumaczenie. Jeśli spróbujesz pomyśleć jako autor edytora tekstu, Twoim głównym pragnieniem będzie stworzenie nowego tekstu, a nie jego usunięcie. Oni (autorzy edytora tekstu) chcą, aby użytkownicy pisali więcej tekstu i coraz więcej ...

Tak więc dla poleceń syntaktycznego cukru (i Y, Di Csą one rodzajem cukru syntaktycznego, ponieważ duplikują już istniejące funkcje), wybierają operacje, które dodają jak najwięcej tekstu ( Yduplikuje całą linię) lub usuwają jak najmniej tekstu ( Di Cusuwają do koniec linii, a nie cała linia).

Borys Serebrow
źródło
Okej, lubię YP; to jest szybkie i łatwe do wpisania. Jestem przekonany. ;)
Wildcard
8

Ybyło dowództwem szarpnięcia pierwszej wersji vi (ex-1.1, 1 stycznia 1978 r.). Ta wersja nie ma yynazwy. ex-2.2 (6 maja 1979 r.) miał zarówno yyi Y. Więc tak naprawdę yyjest synonimem Y( Ypoprzedza yy).

użytkownik3224237
źródło
To jest prawdziwa odpowiedź. Ynie jest zgodny z tą samą logiką, co inne polecenia, ponieważ poprzedza rzecz, którą później został ponownie rozpoznany jako skrót.
mechalynx