Existe uma razão histórica específica para isso?
Plano de fundo - (você pode pular esta parte se já entender a pergunta.)
Como vi
usuários intermediários / avançados saberão, y
é o comando "puxar" - puxa (copia) o texto especificado pelo seguinte comando de movimento. * Assim, ye
puxa para o final da palavra, y0
puxa da posição do cursor para o início da linha, y_
puxa toda a linha atual, y$
puxa da posição do cursor até o final da linha atual, etc.
O d
comando (delete) e o comando c
(change) também podem ser usados com todos esses movimentos.
dd
é um sinônimo d_
e exclui toda a linha atual. Da mesma forma, cc
é sinônimo c_
e alterará a linha atual (ou seja, excluirá todo o texto e o colocará no modo de inserção no início da linha). **
O comando "yank" segue esta convenção; yy
puxará toda a linha atual exatamente como y_
.
Há outro conjunto de sinônimos: D
é um sinônimo d$
e será excluído da posição do cursor até o final da linha. C
é um sinônimo c$
e mudará o texto da posição do cursor para o final da linha, colocando você no modo de inserção para digitar o novo texto.
No entanto, Y
é outro sinônimo para yy
or y_
e puxará a linha inteira , não apenas do cursor até o final da linha, como seria de esperar dos padrões C
e D
.
Entendo que no Vim foi mantido dessa maneira para preservar a compatibilidade com versões anteriores vi
, conforme mencionado na ajuda do Vim em :help Y
:
Se você deseja que "Y" trabalhe do cursor até o final da linha (que é mais lógico, mas não compatível com o Vi), use ": map Y y $".
Portanto, esta é uma ressaca de vi
. Bem.
Mas, por que o comando foi projetado dessa maneira em primeiro lugar? Havia alguma lógica nisso alguma vez?
* Especificamente, coloca o texto no registro 0 e aponta o registro sem nome no registro 0.
** Embora não seja relevante para a minha pergunta, S
é outro sinônimo para cc
or c_
.
Respostas:
Encontrei um artigo "Uma Introdução à Edição de Display com Vi", de William Joy (vi criador) e Mark Horton (mantenedor do vi desde 1979).
Pelo artigo, fica claro que o comportamento Y padrão não é um erro, mas um recurso desejado. Na seção "Reorganizando e duplicando o texto", eles mencionam o seguinte:
Posteriormente na lista de comandos (consulte o apêndice na versão pdf ), a descrição para Y é esta:
Dessa forma, tenho certeza de que Y era um recurso e não um bug.
Quanto à inconsistência com
D
eC
- também tenho uma explicação lógica. Se você tentar pensar como um autor de editor de texto, seu principal desejo seria criar um novo texto e não excluí-lo. Eles (autores do editor de texto) querem que seus usuários escrevam mais texto e mais e mais ...Portanto, para os comandos sugar sintáticos (e
Y
,D
eC
são um tipo de açúcar sintático porque duplicam recursos já existentes), eles escolhem as operações que adicionam o máximo de texto possível (Y
duplicam toda a linha) ou excluem o menor número possível de texto (D
eC
excluem até o fim da linha e não a linha inteira).fonte
YP
; que é rápido e fácil de digitar. Estou convencido. ;)Y
foi o comando yank da primeira versão vi (ex-1.1, 1 de janeiro de 1978). Esta versão não possui oyy
comando cammand. ex-2.2 (6 de maio de 1979) tinha ambosyy
eY
. Então, na verdade,yy
é um sinônimo paraY
(Y
anterioryy
).fonte
Y
não segue a mesma lógica que os outros comandos, porque antecede o que mais tarde foi reconsiderado como abreviação.