2013-07-31 8 views

risposta

3

tuo "stato" iniziale è sbagliato, questo è quello che si ottiene in modalità di inserimento:

bar[] 

in modalità di inserimento, il cursore si trova tra caratteri mentre è su un personaggio in modalità normale . Quando lasci la modalità di inserimento, il cursore ha in un personaggio: quale personaggio potrebbe essere? Quello a sinistra del cursore della modalità di inserimento o quello a destra? In che modo Vim dovrebbe decidere quale parte è quella giusta?

Un suggerimento sarebbe il comando utilizzato per accedere alla modalità di inserimento: lasciare la modalità di inserimento dopo i potrebbe probabilmente lasciare il cursore sul lato sinistro e lo a potrebbe probabilmente lasciarlo sul lato destro. Ma quale sarebbe il punto di avere il cursore sul personaggio che si trova sulla destra dell'ultimo carattere che abbiamo digitato?

In ogni caso, la modalità di inserimento consente di inserire il testo esclusivamente. i<Esc> o a<Esc> non hanno senso e non hanno alcuno scopo pratico. D'altra parte:

Lorem[] dolor sit amet. 
Lorem ipsum[] dolor sit amet. 
<Esc> 
Lorem ipsu[m] dolor sit amet. 

rende molto più senso che:

Lorem[] dolor sit amet. 
Lorem ipsum[] dolor sit amet. 
<Esc> 
Lorem ipsum[ ]dolor sit amet. 

non è vero?

+0

che non ha più senso, non a me – theonlygusti

+0

@theonlygusti quando si esce dalla modalità di inserimento, il cursore si posiziona all'ultimo carattere immesso. – saga

+0

@saga ma io non mi sento che dovrebbe essere, a meno che non è la fine di una riga. Mi sento come se il cursore fosse posizionato su, beh, il cursore – theonlygusti

2

Non vedo un vantaggio diretto semplicemente digitando h.

Il movimento osservato a sinistra è un prodotto laterale di una convenzione in VIM - lasciare sempre la modalità di inserimento "a sinistra" - che trovo molto conveniente.

Comodo, perché ci sono molti modi per accedere alla modalità di inserimento e, dopo aver fatto alcuni inserimenti, mi interessa come uscire piuttosto come ho inserito la modalità di inserimento.

Ci sono modi per cambiare questo comportamento, cfr. questi posti SE:

2

Potrebbe essere perché si è permesso solo per spostare il cursore nella zona scritta ad esempio bar [] dovrebbe diventare ba [r] quando non è in modalità inserimento, ma hai ragione non è necessario che avvenga sempre

+0

@Jan cambiando linea è ancora una modifica valida nel documento quando si esce dalla modalità di inserimento il cursore si sposta indietro dal carattere successivo alla nuova linea che non fa differenza. es. da [] a [\ n] che significa newline (quindi non sfugge alla nuova riga) – Andreas

2

Bene, la convenzione è vim è diversa da quella a cui siamo abituati. Vedere, ad esempio, come funziona il valore predefinito paste. Se si preme p - il testo strattonato appare DOPO il cursore invece di AT sul cursore come siamo abituati.

E dove si trova il cursore alla fine di paste? si trova un personaggio PRIMA della fine del nuovo testo! Quindi se vuoi continuare a scrivere dopo il testo devi spostarti a destra e quindi premere i!

Devi solo passare a pensare che il cursore attuale sia un carattere a destra (o in basso) rispetto a quello che vedi. Questa è la convenzione vim.

Se iniziate ad usare a/o per entrare in modalità di inserimento di default al posto di i/O, potrebbe aiutare a fare questo. È sufficiente passare il tuo pensiero in modo che a sia l'impostazione predefinita, quindi l'incolla e la posizione del cursore che esce dalla modalità insert e molte altre cose abbiano più senso.

Modifica

qualche parola in più per rispondere alla tua domanda in realtà (e non aiutano a far fronte con il comportamento)

La caratteristica più importante in vim è la coerenza di comportamento. L'obiettivo è quello di permetterti di sapere esattamente cosa accadrà senza nemmeno guardare lo schermo.

Quindi, quando si esce dalla modalità insert, dove dovrebbe essere il cursore? È impossibile essere dopo il testo, perché se il testo termina alla fine della riga, il cursore non può arrivarci! (non può essere dopo il di fine riga). Lo stesso per paste - se si incolla alla fine di una riga il cursore risultante non può essere dopo il testo inserito !.

A causa dei requisiti di coerenza, se talvolta non può essere successivo al testo inserito, non dovrebbe mai esserci. Altrimenti, se digiti senza guardare lo schermo, non sai dove sarà il cursore - dovrai cercare e controllare!

Molti dei comportamenti di vim possono essere spiegati in questo modo: perché '^' ti porta al primo carattere e non uno prima? (in modo che a funzionasse per l'inserimento, come fa con paste, $ ecc.), perché se il primo carattere è all'inizio della riga, non si può andare "uno prima di esso". E tu vuoi essere coerente.

5

Dal VIM FAQ:

10.2. In insert mode, when I press the <Esc> key to go to command mode, the 
cursor moves one character to the left (except when the cursor is on 
the first character of the line). Is it possible to change this 
behavior to keep the cursor at the same column? 

No. It is not possible to change this behavior. The cursor is *always* 
positioned on a valid character (unless you have virtual-edit mode 
enabled). So, if you are appending text to the end of a line, when you 
return to command mode the cursor *must* drop back onto the last character 
you typed. For consistency sake, the cursor drops back everywhere, even if 
you are in the middle of a line. 

You can use the CTRL-O command in insert mode to execute a single ex 
command and return back to insert mode without moving the cursor column. 

Vedi this punta vim, se si desidera modificare questo comportamento nel vostro Vimrc e la posizione a sinistra solo su EOL.

+0

Non penso, questa è una buona argomentazione per questa interazione di 'i' e' '. (a): 'i' non è il modo previsto per" aggiungere testo a una riga ". (2): tornare al passaggio "sempre" su un carattere valido non è vero, ad es. quando si trova all'inizio di una linea (eventualmente vuota). – Jan

+0

n @Benj' Non è possibile modificare questo comportamento. ' perché la wiki dice che non è possibile, è perfettamente possibile. Basta aggiungere questo al vostro vimrd.'inoremap l' – saga

+0

@saga Prova a fare che quando sei sul primo carattere della riga e troverete che è un po 'frustrante. – Benj

Problemi correlati