Почему «Оператор» + «Движение» ведут себя противоречиво?

17

Это то, что беспокоило меня долгое время, но я никогда не удосужился спросить. Скажем, текст в вашем буфере выглядит так:

Hello
World

Если я наведу курсор на строку 2 и сделаю это yk, мой курсор закончится на строке 1. Кажется, это подразумевает оператор плюс движение также перемещает курсор. Однако, если я начну со строки 1 и сделаю это yj, мой курсор останется на том же месте. Та же самая непоследовательность случается со многими ключами.

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

Так что с этим поведением? Это ожидается и хорошо задокументировано? Есть ли имя для этого? Это может быть отменено?

В общем, это выглядит как «Назад движется, вперед нет», но есть ли способ, которым я могу окончательно сказать, будет ли оператор + движение перемещать курсор или нет?

DJMcMayhem
источник
2
yэто оператор, а не команда.
romainl

Ответы:

16

Из :h operator

После применения оператора курсор в основном остается в начале текста, с которым был произведен оператор. Например, «yfe» не перемещает курсор, но «yFe» перемещает курсор влево на «e», где начинался рывок.

Происходит то, что курсор перемещается в начало текстового объекта. Включение визуального режима сделает его более заметным. Вы можете думать об этом как о тексте, который выбирается до того, как он будет обработан. Используйте, vbyчтобы увидеть, что я имею в виду.

Томми А
источник