Y a-t-il une raison historique spécifique à cela?
Contexte - (vous pouvez ignorer cette partie si vous comprenez déjà la question.)
Comme intermédiaire / avancé vi
utilisateurs savent, y
est la commande il Yanks « Yank » (copies) le texte spécifié par la commande de mouvement suivant. Ainsi ye
yanks à la fin du mot, y0
yanks de la position du curseur au début de la ligne, y_
tire sur toute la ligne actuelle, y$
tire de la position du curseur à la fin de la ligne actuelle, etc.
La d
commande (supprimer) et la commande c
(modifier) peuvent également être utilisées avec toutes ces requêtes.
dd
est synonyme d_
et supprime l'intégralité de la ligne actuelle. De même, cc
est synonyme de c_
et changera la ligne actuelle (c'est-à-dire qu'il supprimera tout le texte et vous mettra en mode insertion au début de la ligne). **
La commande "yank" suit cette convention; yy
tirera la ligne actuelle entière comme y_
.
Il existe un autre ensemble de synonymes: D
est un synonyme de d$
et sera supprimé de la position du curseur jusqu'à la fin de la ligne. C
est synonyme de c$
et changera le texte de la position du curseur à la fin de la ligne, vous plaçant en mode insertion pour taper le nouveau texte.
Cependant, Y
est un autre synonyme de yy
ou y_
et tirera sur toute la ligne , pas seulement du curseur jusqu'à la fin de la ligne, comme vous pouvez vous y attendre des modèles C
et D
.
Je comprends que dans Vim, il a été conservé de cette façon pour préserver la compatibilité descendante avec vi
, comme cela est mentionné dans l'aide de Vim sous :help Y
:
Si vous aimez que "Y" fonctionne du curseur à la fin de la ligne (ce qui est plus logique, mais pas compatible avec Vi), utilisez ": map Y y $".
Il s'agit donc d'un reliquat de vi
. Bien.
Mais pourquoi le commandement a-t-il été conçu de cette façon en premier lieu? Y avait-il jamais une logique?
* Plus précisément, il place le texte dans le registre 0 et pointe le registre sans nom sur le registre 0.
** Bien que cela ne soit pas pertinent pour ma question, S
est un autre synonyme de cc
ou c_
.
la source
Réponses:
J'ai trouvé un article "An Introduction to Display Editing with Vi" de William Joy (créateur vi) et Mark Horton (mainteneur vi depuis 1979).
D'après le document, il est clair que le comportement Y par défaut n'est pas une erreur, mais une fonctionnalité souhaitée. Dans la section "Réorganisation et duplication du texte", ils mentionnent ceci:
Plus loin dans la liste des commandes (voir l' annexe dans la version pdf ), la description de Y est la suivante:
De cette façon, je suis sûr que Y était une fonctionnalité et non un bug.
Quant à l'incohérence avec
D
etC
- j'ai aussi une explication logique. Si vous essayez de penser en tant qu'éditeur d'éditeur de texte, votre principal désir serait de créer un nouveau texte et non de le supprimer. Ils (auteurs de l'éditeur de texte) veulent que leurs utilisateurs écrivent de plus en plus de texte ...Donc, pour les commandes de sucre syntaxique (et
Y
,D
etC
sont une sorte de sucre syntaxique car elles dupliquent des fonctionnalités déjà existantes), elles choisissent les opérations qui ajoutent le plus de texte possible (Y
duplique toute la ligne) ou suppriment le moins de texte possible (D
etC
suppriment jusqu'à la fin de la ligne et non toute la ligne).la source
YP
; qui est rapide et facile à taper. Je suis convaincu. ;)Y
était la commande yank de la première version vi (ex-1.1, 1er janvier 1978). Cette version n'avait pas leyy
cammand. ex-2.2 (6 mai 1979) avait les deuxyy
etY
. Il s'agit donc enyy
fait d'un synonyme deY
(Y
prédateyy
).la source
Y
ne suit pas la même logique que les autres commandes car elle est antérieure à la chose pour laquelle elle a été reconnectée par la suite comme abréviation.