¿Por qué Y es sinónimo de yy en lugar de y $?

28

¿Hay alguna razón histórica específica para esto?


Antecedentes : (puede omitir esta parte si ya comprende la pregunta).

Como visabrán los usuarios intermedios / avanzados , yes el comando "tirar": tira (copia) el texto especificado por el siguiente comando de movimiento. * Por lo tanto, yetira hacia el final de la palabra, y0tira 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 dcomando (eliminar) y el comando c(cambiar) también se pueden usar con todos estos movimientos.

ddes sinónimo d_y elimina toda la línea actual. Del mismo modo, cces 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; yytirará de toda la línea actual al igual que y_.

Hay otro conjunto de sinónimos: Des un sinónimo de d$y se eliminará de la posición del cursor hasta el final de la línea. Ces 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, Yes otro sinónimo de yyo 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 Cy 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, Ses otro sinónimo de cco c_.

Comodín
fuente
3
No estoy seguro de por qué se hizo así. Tendrías que preguntarle a Bill Joy al respecto. Sin embargo, es probable que sea un error lógico, que nunca se ha solucionado en el vi original y luego se convirtió en todos los clones y, por lo tanto, POSIX lo exigió.
Christian Brabandt
3
Si alguna vez encuentras la respuesta, también la necesitan aquí . ;)
joeytwiddle
1
Dudo que esta sea la razón real, pero la persona que se opuso a que Y fuera reasignado en vim-sensible argumentó que, como programador en C, solían tirar del final de la línea mucho más que el tirón de toda la línea, y por lo tanto el las asignaciones predeterminadas son buenas. YMMV: el mío ciertamente lo hace.
Rico

Respuestas:

16

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:

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.

Más adelante en la lista de comandos (vea el apéndice en la versión pdf ), la descripción de Y es esta:

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.

De esta manera, estoy seguro de que Y fue una característica y no un error.

En cuanto a la inconsistencia con Dy C- 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, Dy Cson 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 ( Yduplica toda la línea) o Delete menos texto como sea posible ( Dy Cborrar hasta el final de la línea y no toda la línea).

Boris Serebrov
fuente
Está bien, me gusta YP; eso es rápido y fácil de escribir. Estoy convencido. ;)
Comodín el
8

Yfue 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 el yycammand. ex-2.2 (6 de mayo de 1979) tenía ambos yyy Y. Entonces, en realidad yyes sinónimo de Y( Ypredates yy).

usuario3224237
fuente
Esta es la verdadera respuesta. Yno 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.
Mechalynx