Rientra al livello di rientro successivo con >>


9

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

Se hai anche filetype plugin indent onnel tuo .vimrc, si applicheranno le regole relative al rientro di filetype (e plugin). Controllare cioè ciò che il vostro tabstopvalore 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
VanLaser

3
>>e <<rispettivamente aggiungere e rimuovere il rientro che non è quello che vuoi. Quello che vuoi è "formattazione", che è fatto con ==.
romainl

potrebbe anche mappare :nnoremap >> ^i<tab><esc>se si desidera davvero il comportamento delle schede>>
Wolfie,

@romainl ==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 .
Dumitru,

2
No, ==utilizza uno equalexpro equalprgper riformattare le righe indicate.
romainl,

Risposte:


12

Quando si utilizza uno dei comandi {count}>>, {count}<<, >{motion}o <{motion}, su alcune linee già rientrato, e si desidera che il loro nuovo livello di indentazione di essere un multiplo del 'shiftwidth'valore di opzione, è possibile attivare l' 'shiftround'opzione e aggiungere questa riga nel vostro vimrc:

set shiftround

2

Se vuoi sempre >>rientrare al tabstop successivo ed <<eliminare all'ultimo tabstop, puoi ricollegarli in questo modo:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Questo sposterà il cursore, ma probabilmente potresti fare qualche trucco per spostarlo indietro. ^non lascia un m'segno, ma puoi lasciarne uno manualmente all'interno della rilegatura.

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.