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_
.