2010-09-09 8 views
28

Quando si passa alla modalità comando in Vim, il cursore sembra spostare un carattere indietro quando si trova alla fine o su una parola e quando si va alla fine con $ , non va alla fine della riga attuale ma un carattere prima della fine dell'ultima parola, e l ("el") non lo sposta in avanti e devo usare il tasto freccia per arrivarci.Posizionamento del cursore quando si entra in modalità inserimento

Non sono stato in grado di trovare la documentazione di questo comportamento, ma questo mi sembra strano. Qual è il ragionamento alla base di questo (per mia curiosità), e come posso aggirarlo (o affrontarlo)?

+1

ringrazia tutti! molto utile. – hatmatrix

risposta

50

è un po 'più chiaro se si utilizza gvim, dove il cursore cambia.

la modalità di inserimento in gvim ha il cursore come un raggio I, poiché la lettera successiva digitata verrà inserita dopo il carattere |. la modalità normale ha il cursore di blocco, perché la prossima cosa che scrivi può semplicemente effettuare la lettera che è attualmente evidenziata (come se tu usassi x, s, ecc.). Quindi la modalità di inserimento è in realtà l'aggiunta di testo, ma la modalità normale sta modificando il testo in qualche modo.

Quindi in modalità normale, saltare alla fine della linea significa solo l'ultimo carattere, poiché è l'ultima cosa che è possibile modificare. in modalità inserimento, il cursore supera l'ultimo carattere, poiché è possibile aggiungere le cose in seguito.

Una cosa da tenere a mente è che si può controllare quale lato del blocco si finisce in corso dalla modalità normale alla modalità di inserimento



Diciamo che avete t [h] è testo

([] significa che il cursore blocco è sopra che h)



Diciamo che avete t | suo testo

se ho premuto a questo punto, il cursore sarebbe simile a questa (in gvim) (| essendo il cursore modalità inserimento)



Diciamo che avete ° | è un testo

se è stato premuto un posto di i, sarebbe simile a questa



Un'altra cosa da tenere a mente (come indicato da Pavanlimo), dalla modalità normale è possibile accedere agli ins modalità ert con il cursore appena prima del primo carattere della linea o subito dopo l'ultimo carattere, con maiusc + I o Maiusc-A.

+1

Molto informativo. Grazie – hatmatrix

+1

contento di aver aiutato :) –

+14

Key press 'a' è quello che ho desiderato troppo a lungo. Grazie Matt. – AshleyS

16

Io non sono del tutto sicuro del ragionamento dietro di esso, ma si può lavorare intorno ad esso premendo:

Shift + a 
+0

Funziona, e il motivo è 'A'. Puoi leggere di più [lì] (http://bullium.com/support/vim.html) –

5

Si tratta di implementazione dipende dal fatto che il cursore può muoversi oltre la fine della linea (almeno è un'opzione nella modalità di emulazione VIM del mio editor). È possibile premere a per accedere alla modalità di inserimento e avviare la modifica dopo il carattere corrente in questa situazione (anziché i).

7

Questo perché tutti i comandi utilizzati influenzano la lettera il cursore è finito. Se non avrebbe senso premere x (eliminare 1 lettera) dietro la lettera effettiva.

In realtà non è necessario spostare il cursore in modalità comando dietro l'ultima lettera, se si desidera ad es. append puoi premere a che mette il cursore dietro la lettera nella modalità di inserimento.

10

Potreste essere interessati nell'opzione virtualedit e il seguente valore:

set virtualedit=onemore 

Con questa opzione è possibile spostare il cursore di un carattere oltre la fine della riga e quindi premere i per inserire modalità dopo l'ultimo carattere.

Questo risolve il problema in un certo senso ma personalmente trovo questo comportamento un po 'strano. Solo in pochi casi si verifica il problema quindi potrebbe essere la pena di ignorarlo ;-)

1

Suggerisco

:set virtualedit=onemore 
:inoremap <Esc> <Esc>`^ 
+0

Perché suggerisci di cambiare il comando i (per accedere alla modalità di modifica)? –

+0

Per impedire al cursore di spostare un carattere a sinistra. – Alexey

Problemi correlati