Dlaczego „Operator” + „Ruch” zachowują się niekonsekwentnie?

17

To coś mnie martwiło od dłuższego czasu, ale nigdy nie miałem o co pytać. Powiedz, że tekst w buforze wygląda następująco:

Hello
World

Jeśli ustawię kursor gdzieś w linii 2 i zrobię to yk, mój kursor zakończy się na linii 1. Wydaje się, że to oznacza, że ​​operator plus ruch również przesuwa kursor. Jeśli jednak zacznę od linii 1 i zrobię to yj, mój kursor pozostanie w tym samym miejscu. Ta sama niespójność zdarza się przy wielu kluczach.

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

Więc co z tym zachowaniem? Czy jest to oczekiwane i dobrze udokumentowane? Czy jest na to jakaś nazwa? Czy można to zmienić?

Zasadniczo wydaje się, że „ruchy do tyłu, ruchy do przodu nie”, ale czy istnieje sposób, aby definitywnie stwierdzić, czy operator + ruch poruszy kursorem, czy nie?

DJMcMayhem
źródło
2
yto operator, a nie polecenie.
romainl

Odpowiedzi:

16

Od :h operator

Po zastosowaniu operatora kursor pozostaje w większości na początku tekstu, na którym operowano. Na przykład „yfe” nie przesuwa kursora, ale „yFe” przesuwa kursor w lewo do „e”, w którym rozpoczął się szarpnięcie.

Dzieje się tak, że kursor jest przenoszony na początek obiektu tekstowego. Włączenie trybu wizualnego sprawi, że będzie to bardziej widoczne. Możesz pomyśleć o tym, jak tekst jest zaznaczany przed operacją. Użyj, vbyaby zobaczyć, co mam na myśli.

Tommy A.
źródło