Perché Y è sinonimo di yy anziché y $?


28

C'è una ragione storica specifica per questo?


Sfondo - (puoi saltare questa parte se hai già capito la domanda.)

Come visapranno gli utenti intermedi / avanzati , yè il comando "yank", che tira (copia) il testo specificato dal seguente comando di movimento. * Quindi, yetira alla fine della parola, y0tira 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 dcomando (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; yystrapperà 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 yyo y_e strapperà l' intera linea , non solo dal cursore alla fine della linea come ci si aspetterebbe dai modelli Ce 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 cco c_.


3
Non sono sicuro del perché sia stato fatto così. Dovresti chiederlo a Bill Joy. È probabile, tuttavia, che si tratti di un errore logico, che non è mai stato corretto nel vi originale e quindi è stato trasformato in tutti i cloni e alla fine è stato richiesto da POSIX.
Christian Brabandt,

3
Se mai trovi la risposta, ne hanno bisogno anche qui . ;)
joeytwiddle

1
Dubito che questo sia il vero motivo, ma la persona che ha obiettato che Y fosse rimappato in vim-sensible sosteneva che, come programmatore C, usavano lo strattone di fine linea molto più dello strattone di linea intera, e quindi il i mapping predefiniti sono buoni. YMMV: il mio certamente.
Rich

Risposte:


16

Ho trovato un articolo "An Introduction to Display Editing with Vi" di William Joy (creatore di vi) e Mark Horton (manutentore di vi dal 1979).

Dal documento è chiaro che il comportamento Y predefinito non è un errore, ma una funzionalità desiderata. Nella sezione "Riorganizzare e duplicare il testo" citano questo:

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.

Più avanti nell'elenco dei comandi (vedi l' appendice nella versione pdf ), la descrizione per Y è questa:

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.

In questo modo sono sicuro che Y fosse una caratteristica e non un bug.

Per quanto riguarda l'incoerenza con De C- ho anche una spiegazione logica. Se provi a pensare come autore di editor di testo, il tuo desiderio principale sarebbe quello di creare un nuovo testo e non eliminarlo. Loro (autori dell'editor di testi) vogliono che i loro utenti scrivano più testo e sempre di più ...

Quindi per i comandi di zucchero sintattico (e Y, De Csono una specie di zucchero sintattico perché duplicano caratteristiche già esistenti) scelgono le operazioni che aggiungono più testo possibile ( Yduplica l'intera riga) o eliminano il meno testo possibile ( Ded Celiminano fino a la fine della riga e non l'intera riga).


Va bene, mi piace YP; che è veloce e facile da scrivere. Sono convinto. ;)
Wildcard il

8

Yera il comando yank della prima versione vi (ex-1.1, 1 gennaio 1978). Questa versione non aveva il yycammand. ex-2.2 (6 maggio 1979) aveva entrambi yye Y. Quindi in realtà yyè sinonimo di Y( Ypredati yy).


Questa è la vera risposta. Ynon segue la stessa logica degli altri comandi perché precede la cosa per cui è stato successivamente ricollegato come abbreviazione.
mechalynx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.