Perché il cursore si sposta all'inizio della riga dopo <Esc>?


12

Ho notato durante la modifica lungo una riga in un file .txt in modalità inserimento il cursore si sposta all'inizio della riga dopo una scrittura usando la sequenza di tasti:

<esc>:w

Vorrei cambiare questo comportamento in modo tale che il cursore rimanga in posizione dopo a: write. È possibile? Non ho bisogno che il cursore rimanga in modalità inserimento, mi piacerebbe solo che mantenga la sua ultima posizione dopo una scrittura.

Sto usando gVim 7.4 su Windows. Il mio .vimrc è molto semplice, non credo che nessuna delle mie impostazioni interferisca con questo comportamento. Ho anche rimosso il sourcing di mswin.vim e example.vim dal mio .vimrc (in bundle con il programma di installazione ufficiale di Windows per vim.org).

Dopo aver letto i commenti qui sotto ho esaminato di nuovo il problema e ho realizzato che il cursore si sposta solo all'estrema sinistra dopo una scrittura su linee che sono interamente costituite da uno spazio bianco finale. In altre parole, il cursore si sposta all'estrema sinistra solo su esc-: w quando la linea è un rientro sospeso senza altri caratteri oltre agli spazi . .Vimrc gestisce i comportamenti di rientro con queste impostazioni:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

Quindi, una nuova linea creata sotto una linea rientrata conterrà 4 spazi bianchi finali come i primi 4 spazi della linea (che voglio mantenere). Al tasto 'esc' premere il cursore scorre verso l'estrema sinistra del buffer.

C'è un modo per mantenere la posizione del cursore quando si preme 'esc' per tornare alla modalità normale, su una linea composta da spazi bianchi finali (come rientro)?


3
Non ho mai notato questo comportamento in Vim su nessuna piattaforma ... Cosa succede se avvii gVim come: gvim -u NONE -U NONE(puoi usare cmd.exe o fare un collegamento)? Ciò impedirà il caricamento dei file (g) vimrc.
Martin Tournoij,

1
È il tuo file vimrc completo ? Il mio primo sospetto sarebbe che un autocmd nel tuo file vimrc rimuova gli spazi bianchi finali. Il comportamento cambia quando si avvia gVim senza alcun file vimrc (vedere il commento sopra)?
Martin Tournoij,

Quanto sopra non è il mio .vimrc completo, ci sono anche altre impostazioni. L'esecuzione di gVim senza .vimrc (: scriptnames non mostra alcun .vimrc o .gvimrc) risolve il mio problema. Hai assolutamente ragione, ho bisogno di guardare attraverso il mio .vimrc o qualcos'altro che potrebbe provenire da questo.
Jim,

Apparentemente questa eliminazione di spazi bianchi su nuove righe è un comportamento desiderabile, sto leggendo qui che ha lo scopo di mantenere il file pulito dagli spazi bianchi.
Jim,

Si tratta di aprire nuove righe ... Non di scrivere su un file?
Martin Tournoij,

Risposte:


11

Guardare la documentazione di autoindent ha una risposta sul perché e come aggirarla. :help 'autoindent':

Copia il rientro dalla riga corrente quando si avvia una nuova riga (digitando <CR> in modalità Inserisci o quando si utilizza il comando "o" o "O"). Se non si digita nulla sulla nuova linea ad eccezione <BS>o CTRL-De digitare <Esc>, CTRL-Oo <CR>, il trattino è soppresso nuovo. Spostare il cursore su un'altra riga ha lo stesso effetto, a meno che il flag "I" non sia incluso in "cpoptions".

In altre parole, se vuoi che non perda il rientro, digita qualcosa e poi torna indietro prima di colpire Esc, e lo spazio iniziale rimarrà.

In alternativa, se vuoi tornare a livello di rientro quando torni nella modalità di inserimento e stai usando 'cindent'anche, usa Shift-Sinvece di i, che cancellerà la linea (già vuota) e inizi dal livello di rientro appropriato. Questa non è una soluzione generale come quella sopra, ma preferisco questo quando scrivo il codice C, in modo che i miei file non vengano effettivamente salvati con le righe solo bianche.


Questa è una risposta definitiva alla mia domanda dalla documentazione originale. Grazie per il riassunto e la narrazione - non avrei pensato di esaminare: h autoindente per queste informazioni. Grazie anche a @Carpetsmoker per la discussione che ha portato a una soluzione.
Jim,

Ciò ha risolto un problema che comportavo rimappare o e O per non lasciare la modalità di inserimento, ma per mantenere il rientro. Questo può essere fatto facendo nnoremap o o <BS><Esc><DEL>ennoremap O O <BS><Esc><DEL>
Max Coplan il

Grazie mille!
Max Coplan,
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.