2010-08-09 15 views
17

Attualmente sto combattendo con Vim, non riesco a fare in modo che le opzioni di indentazione facciano quello che voglio.Come disabilitare il rientro di vim dell'interruttore?

Ecco le mie impostazioni, le ho posizionate in fondo a .vimrc per assicurarmi che abbiano la precedenza. Come potete vedere sto andando un po 'pazzo, così ho cercato di spegnere quasi tutto:

set cindent 
set cinkeys=o,O 
set cinoptions= 
set cinwords= 
set indentexpr= 

Nella maggior parte dei casi sembra funzionare bene, lo fa un trattino dopo l'apertura di un blocco e tutto è andato bene. Ma c'è un caso che sta facendo impazzire, quando c'è un { dopo una dichiarazione case, la riga successiva è troppo lontano rientrato:

switch() { 
    case CASE: { 
        // <-- next line gets indented to here, why?? 
     // <-- should be indented to here 

Come posso farlo smettere di fare questo? TIA

+0

Nel caso in cui sei curioso, lo strano comportamento ha lo scopo di consentire di scrivere un'istruzione sulla stessa riga del caso, con istruzioni aggiuntive allineate al primo, ad esempio, 'caso CASE: x = 1; '¶' y = 2; 'dove xey si trovano nella stessa colonna. – Will

risposta

18
:set cinoptions=l1 

(che è la lettera ell seguita da un numero uno)

un'occhiata a: aiutare cinoptions valori per la stringa e la descrizione delle diverse opzioni di default.

+0

Questo ha fatto il trucco, grazie! – andy

1

Quando si digita manualmente i comandi set, non ottengo alcun rientro. Hai esaminato l'output di :set all per confermare che le tue impostazioni non vengano sovrascritte?

Nota: questo dovrebbe probabilmente essere in un commento, ma questa opzione è attualmente non consentita per me.

+0

Avevo la sensazione che succedesse qualcosa di strano, ma non vedo nulla di sorprendente guardando ": set all". Forse usa il suo predefinito segreto quando lascio queste opzioni in bianco? Non lo so .. – andy

+0

È interessante notare che quando l'ho provato, stavo usando GVim 7.2.269 su Windows. Quando ho provato di nuovo a utilizzare 7.2.330 sotto Linux, i miei risultati corrispondevano al tuo OP. – rlduffy

1

Se trattino è N spazi (sostituire N con valore reale), provare

set cinoptions=p0,t0,:N,=0 
set cinwords=if,else,switch,case,for,while,do 
set cindent 

: N - label> posto 'caso' 0 caratteri trattino

= 0 dello switch -> trattini le dichiarazioni all'interno dell'etichetta del caso

Problemi correlati