Por que “Operador” + “Movimento” se comportam de maneira inconsistente?

17

Isso é algo que me incomoda há muito tempo, mas nunca cheguei a perguntar. Digamos que o texto em seu buffer fique assim:

Hello
World

Se eu colocar meu cursor em algum lugar na linha 2, e o fizer yk, meu cursor terminará na linha 1. Isso parece implicar um operador e um movimento também move o cursor. No entanto, se eu iniciar na linha 1 e yjcontinuar, meu cursor permanecerá no mesmo local. A mesma inconsistência acontece com muitas chaves.

Moves   Doesn't move
gg      G
h       l
{       }
(       )
T       t
F       f
?       /

Então, o que há com esse comportamento? Isso é esperado e bem documentado? Existe um nome para isso? Pode ser substituído?

Em geral, parece que "o movimento para trás, o para a frente não", mas existe uma maneira de saber se um operador + movimento moverá o cursor ou não?

DJMcMayhem
fonte
2
yé um operador, não um comando.
Romainl

Respostas:

16

A partir de :h operator

Depois de aplicar o operador, o cursor é deixado principalmente no início do texto que foi operado. Por exemplo, "yfe" não move o cursor, mas "yFe" move o cursor para a esquerda até o "e" onde o arranque foi iniciado.

O que está acontecendo é que o cursor está sendo movido para o início do objeto de texto. A ativação do modo visual tornará mais aparente. Você pode pensar nisso como o texto está sendo selecionado antes de ser operado. Use vbypara ver o que eu quero dizer.

Tommy A
fonte