¿Hay alguna razón histórica específica para esto?
Antecedentes : (puede omitir esta parte si ya comprende la pregunta).
Como vi
sabrán los usuarios intermedios / avanzados , y
es el comando "tirar": tira (copia) el texto especificado por el siguiente comando de movimiento. * Por lo tanto, ye
tira hacia el final de la palabra, y0
tira desde la posición del cursor hasta el comienzo de la línea, y_
tira de toda la línea actual, y$
tira de la posición del cursor al final de la línea actual, etc.
El d
comando (eliminar) y el comando c
(cambiar) también se pueden usar con todos estos movimientos.
dd
es sinónimo d_
y elimina toda la línea actual. Del mismo modo, cc
es sinónimo de c_
y cambiará la línea actual (es decir, eliminará todo el texto y lo pondrá en modo de inserción al comienzo de la línea). **
El comando "tirar" sigue esta convención; yy
tirará de toda la línea actual al igual que y_
.
Hay otro conjunto de sinónimos: D
es un sinónimo de d$
y se eliminará de la posición del cursor hasta el final de la línea. C
es un sinónimo de c$
y cambiará el texto desde la posición del cursor hasta el final de la línea, colocándolo en modo de inserción para escribir el nuevo texto.
Sin embargo, Y
es otro sinónimo de yy
o y_
y tirará de toda la línea , no solo desde el cursor hasta el final de la línea, como cabría esperar de los patrones C
y D
.
Entiendo que en Vim se mantuvo de esta manera para preservar la compatibilidad con versiones anteriores vi
, como se menciona en la ayuda de Vim en :help Y
:
Si desea que "Y" funcione desde el cursor hasta el final de la línea (que es más lógico, pero no compatible con Vi) use ": map Y y $".
Así que este es un remanente de vi
. Multa.
Pero, ¿por qué el comando fue diseñado de esa manera en primer lugar? ¿Había alguna lógica en eso alguna vez?
* Específicamente coloca el texto en el registro 0 y señala el registro sin nombre en el registro 0.
** Aunque no es relevante para mi pregunta, S
es otro sinónimo de cc
o c_
.