2013-05-07 15 views
7

A volte lo smartindent di vim non seleziona il livello corretto di indentazione per la riga successiva una volta premuto Invio e vorresti tornare al livello di rientro della riga precedente e passare da lì. So che puoi raggiungere lo ctrl-d un paio di volte per ottenere questo risultato, ma sarebbe più utile per una chiave che va immediatamente al livello di indentazione della riga sopra.Come tornare al livello di rientro precedente in modalità di inserimento?

+0

Dovresti rilasciare 'smartindent', probabilmente c'è un migliore' indentexpr' di default per il tuo tipo di file. – romainl

+0

In realtà non utilizzo smartindent e utilizzo le regole di indentazione del plugin del tipo di file come suggerito. Tuttavia, non sono completamente accurati ... – rgrinberg

risposta

1

Se non si può essere preso la briga di installare un plug-in per un compito così semplice (non ho potuto), provate questo semplice mappatura:

:inoremap <C-D> <Esc>:call setline(".",substitute(getline(line(".")),'^\s*',matchstr(getline(line(".")-1),'^\s*'),''))<CR>I 

Ora CtrlD in modalità di inserimento sarà fai l'atto: indentare la linea corrente come nella riga precedente.

Questo funziona meglio prima di iniziare a digitare sulla nuova riga, perché ripristinerà il cursore appena oltre il rientro.

+0

Grazie, questa è la risposta più diretta e più semplice. In realtà sono andato con il plugin che Ingo ha pubblicato comunque. – rgrinberg

1

In modalità normale è possibile utilizzare < e > per aumentare o ridurre il rientro. Funzionano come previsto con i movimenti, selezione visiva e >><< per la riga corrente. Puoi anche usare = per scegliere il livello di indentazione "corretto", di nuovo funziona come previsto per i movimenti ecc.

Quindi quello che faccio di solito è correggere gli errori di indentazione in modalità normale dopo che ho finito di modificare, da un combinazione del blocco che seleziona e utilizza = e quindi fissa le singole righe con << e >>.

0

È possibile utilizzare <C-O>=G per rientrare dal cursore alla fine del file in modalità di inserimento. Oppure <C-O><< per rimuovere un livello di indentazione.

+4

Ctrl + d e ctrl + t sono più facili da usare quando ci si trova in modalità di inserimento. – jbr

3

Non so se è pura coincidenza, ma Alexey Radev ha appena pubblicato lo prev_indent plugin, che fornisce una mappatura in modalità inserimento e il comando :PrevIndent per spostare la riga corrente al livello di rientro precedente.

+0

funziona come un fascino, grazie – mko

Problemi correlati