Perché "Operatore" + "Movimento" si comportano in modo incoerente?


17

Questo è qualcosa che mi ha infastidito per molto tempo, ma non ho mai avuto domande. Dì che il testo nel buffer è simile al seguente:

Hello
World

Se posiziono il cursore da qualche parte nella riga 2 e lo faccio yk, il cursore terminerà sulla riga 1. Questo sembra implicare che un operatore più un movimento sposta anche il cursore. Tuttavia, se inizio alla riga 1 e lo faccio yj, il mio cursore rimane nello stesso punto. La stessa incoerenza si verifica con molte chiavi.

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

Allora, cosa succede con questo comportamento? È previsto e ben documentato? C'è un nome per questo? Può essere ignorato?

In generale, sembra che "si muova all'indietro, in avanti no", ma c'è un modo in cui posso dire definitivamente se un operatore + movimento sposta il cursore o no?


2
yè un operatore, non un comando.
Romainl,

Risposte:


16

A partire dal :h operator

Dopo aver applicato l'operatore, il cursore viene lasciato per lo più all'inizio del testo su cui è stato operato. Ad esempio, "yfe" non sposta il cursore, ma "yFe" sposta il cursore verso sinistra sulla "e" da cui è iniziato lo yank.

Quello che sta succedendo è che il cursore viene spostato all'inizio dell'oggetto di testo. L'abilitazione della modalità visiva renderà più evidente. Puoi pensarlo mentre il testo viene selezionato prima di essere utilizzato. Usa vbyper vedere cosa intendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.