¿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_
.
Respuestas:
Encontré un artículo "Introducción a la edición de pantallas con Vi" de William Joy (creador de vi) y Mark Horton (mantenedor de vi desde 1979).
Del documento está claro que el comportamiento predeterminado de Y no es un error, sino una característica deseada. En la sección "Reorganizar y duplicar texto" mencionan esto:
Más adelante en la lista de comandos (vea el apéndice en la versión pdf ), la descripción de Y es esta:
De esta manera, estoy seguro de que Y fue una característica y no un error.
En cuanto a la inconsistencia con
D
yC
- También tengo una explicación lógica. Si intenta pensar como autor de un editor de texto, su deseo principal sería crear un nuevo texto y no eliminarlo. Ellos (los autores del editor de texto) quieren que sus usuarios escriban más texto y más y más ...Así que para los comandos de azúcar sintáctica (y
Y
,D
yC
son una especie de azúcar sintáctico porque ya duplican las características existentes) que elijan las operaciones que añaden tanto texto como sea posible (Y
duplica toda la línea) o Delete menos texto como sea posible (D
yC
borrar hasta el final de la línea y no toda la línea).fuente
YP
; eso es rápido y fácil de escribir. Estoy convencido. ;)Y
fue el comando de extracción de la primera versión vi (ex-1.1, 1 de enero de 1978). Esta versión no tenía elyy
cammand. ex-2.2 (6 de mayo de 1979) tenía ambosyy
yY
. Entonces, en realidadyy
es sinónimo deY
(Y
predatesyy
).fuente
Y
no sigue la misma lógica que los otros comandos porque es anterior a la cosa para la que luego se volvió a configurar como abreviatura.