C'è una ragione storica specifica per questo?
Sfondo - (puoi saltare questa parte se hai già capito la domanda.)
Come vi
sapranno gli utenti intermedi / avanzati , y
è il comando "yank", che tira (copia) il testo specificato dal seguente comando di movimento. * Quindi, ye
tira alla fine della parola, y0
tira dalla posizione del cursore all'inizio della riga, y_
strappa l'intera linea corrente, y$
strappa dalla posizione del cursore alla fine della linea corrente, ecc.
Il d
comando (elimina) e il comando c
(modifica) possono entrambi essere usati anche con tutti questi movimenti.
dd
è sinonimo di d_
ed elimina l'intera riga corrente. Allo stesso modo, cc
è sinonimo di c_
e cambierà la riga corrente (cioè eliminerà tutto il testo e ti metterà in modalità di inserimento all'inizio della riga). **
Il comando "yank" segue questa convenzione; yy
strapperà l'intera linea corrente proprio come y_
.
Esiste un altro insieme di sinonimi: D
è sinonimo di d$
e verrà eliminato dalla posizione del cursore alla fine della riga. C
è sinonimo di c$
e cambierà il testo dalla posizione del cursore alla fine della riga, mettendoti in modalità di inserimento per digitare il nuovo testo.
Tuttavia, Y
è un altro sinonimo di yy
o y_
e strapperà l' intera linea , non solo dal cursore alla fine della linea come ci si aspetterebbe dai modelli C
e D
.
Comprendo che in Vim è stato mantenuto in questo modo per preservare la retrocompatibilità con vi
, come è menzionato nella guida di Vim sotto :help Y
:
Se ti piace "Y" per lavorare dal cursore alla fine della riga (che è più logico, ma non compatibile con Vi) usa ": map Y y $".
Quindi questo è un passaggio da vi
. Belle.
Ma perché il comando è stato progettato in questo modo in primo luogo? C'è mai stata una logica ad esso?
* In particolare inserisce il testo nel registro 0 e punta il registro senza nome sul registro 0.
** Anche se non è rilevante per la mia domanda, S
è un altro sinonimo di cc
o c_
.