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_
.
źródło
Odpowiedzi:
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:
Później na liście poleceń (patrz załącznik w wersji pdf ) opis Y jest następujący:
W ten sposób jestem pewien, że Y było cechą, a nie błędem.
Co do niezgodności z -
D
iC
ja 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
,D
iC
są one rodzajem cukru syntaktycznego, ponieważ duplikują już istniejące funkcje), wybierają operacje, które dodają jak najwięcej tekstu (Y
duplikuje całą linię) lub usuwają jak najmniej tekstu (D
iC
usuwają do koniec linii, a nie cała linia).źródło
YP
; to jest szybkie i łatwe do wpisania. Jestem przekonany. ;)Y
było dowództwem szarpnięcia pierwszej wersji vi (ex-1.1, 1 stycznia 1978 r.). Ta wersja nie mayy
nazwy. ex-2.2 (6 maja 1979 r.) miał zarównoyy
iY
. Więc tak naprawdęyy
jest synonimemY
(Y
poprzedzayy
).źródło
Y
nie jest zgodny z tą samą logiką, co inne polecenia, ponieważ poprzedza rzecz, którą później został ponownie rozpoznany jako skrót.