Di tanto in tanto devo lavorare con un codice che non è indentato al livello di rientro che ho impostato su Vim (4 spazi per livello), di solito dopo aver copiato / incollato qualcosa nel file. Di solito mi accontento di <<e >>. Il problema è che non passano al livello di rientro successivo, aggiungono o sottraggono solo 4 spazi.
Se ho un codice come questo
if condition:
do this
do that
facendo >>il do thatsi tradurrà in
if condition:
do this
do that
Voglio che vada a questo
if condition:
do this
do that
Oltre ad abbinare facilmente il rientro della riga sopra, voglio che salti al livello successivo di rientro, senza aggiungere 4 spazi.
Questo è ciò che ho nel mio .vimrc per quanto riguarda il rientro
:set tabstop=4 shiftwidth=4 expandtab
>>e <<rispettivamente aggiungere e rimuovere il rientro che non è quello che vuoi. Quello che vuoi è "formattazione", che è fatto con ==.
:nnoremap >> ^i<tab><esc>se si desidera davvero il comportamento delle schede>>
==salterà al livello della linea sopra. Mentre una buona cosa da sapere, non funzionerebbe in tutti i casi che mi interessano. Come aggiunta alla domanda, quello che voglio è per >>e <<di indentare / dedicare fino al prossimo multiplo di shiftwidth dal bordo in quella direzione .
==utilizza uno equalexpro equalprgper riformattare le righe indicate.
filetype plugin indent onnel tuo.vimrc, si applicheranno le regole relative al rientro di filetype (e plugin). Controllare cioè ciò che il vostrotabstopvalore in realtà è (set tabstop?farà; stessa cosa per le altre impostazioni), quando si modifica, e cambiare quei valori aggiungendo la linea a un 'dopo' di file, qualcosa di simile: stackoverflow.com/a/159066/5000478