Quale cornice in vim contrasta rifiuto di smartindent al rientro # commenti negli script di shell?

StackOverflow https://stackoverflow.com/questions/385327

  •  23-08-2019
  •  | 
  •  

Domanda

Recentemente ho iniziato ad usare vim 7 (precedentemente vim 6) e l'impostazione smartindent. Per la maggior parte, funziona bene, anche se sono così abituato a digitare una scheda dopo una parentesi graffa aperta che è quasi controproducente.

Tuttavia, v'è un pezzo di comportamento maniacale. Quando si modifica uno script di shell, cerco di creare un commento al livello di rientro corrente, ma smartindent avrò nulla a che fare con esso. Si insiste sul fatto che il commento deve essere al livello 0 (senza trattino). Quel che è peggio, si rompe spostamento a destra ( '>>' e gli amici) in modo che non funzionano. Questo è l'insubordinazione a titolo definitivo, e mi piacerebbe sapere qual è il modo migliore per risolvere il problema?

(io sono anche non appassionato di idee di smartindent circa rientro then dopo if.)

Le soluzioni preferite mi salverà colpire manuale - sto essendo pigro. Una possibilità sarebbe quella 'spegnere smartindent durante la modifica di script di shell (lasciarlo acceso per tutto il resto)'. Un'altra opzione sarebbe linee guida su come trovare lo script di controllo per smartindent e cosa modificare per cambiare le caratteristiche che non mi piacciono. L'ultima opzione (che non ho bisogno di consigli su come fare - solo il suggerimento che è il migliore, o solo, modo per ripristinare la sanità mentale). È di lasciare smartindent unset

Ho visto l'vagamente correlata domanda su " (PHP e) vim fastidioso regole Unindent " ; non fornisce me con la risposta diretta, anche se forse il cindent e articoli affini di cui ci sono infatti una parte della risposta.

È stato utile?

Soluzione

Trovare il file trattino, (per esempio /usr/share/vim/vim71/indent/sh.vim sul mio sistema)

Questa linea appare come il problema:

setlocal indentkeys-=:,0#

Forse si può risolvere questo problema nel vostro .vimrc o caricare un file di rientro personalizzato manualmente.

modifica:. Sembra più complicato di quanto pensassi, ma forse c'è qualcosa di specificamente indicato nella documentazione di rientro che si avrebbe bisogno di risolvere il problema

2 ° Edit: Sembra che ero completamente sbagliato, Check out:

Ripristino trattino dopo aver digitato hash

o

howto -configure-vim-a-non-mettere-commenti-at-the-inizio-di-linee-mentre-editing

Altri suggerimenti

Bene, dopo avere esplorato alcune opzioni, compreso l'uso di ':set cindent' al posto di ':set smartindent', ho finito per ritornare al usando solo ':set autoindent'. Probabilmente ci sono modi per rendere questo lavoro roba esattamente come voglio che, ma è abbastanza disordinato e abbastanza laborioso che non posso essere disturbato. Ho lavorato bene con autoindent per i precedenti anni 20-dispari, ed i benefici delle extra campane e fischietti forniti da smartindent sono inferiori ai ciò che io considero il suo comportamento scorretto.

Grazie, Juan, per la vostra assistenza. Che ci crediate o no, lo ha fatto aiuto -. Un bel po '

Ho anche scoperto un paio di altri comandi pulito, però, seguendo su questo:

>i}
>a}

Queste destro spostare il blocco di codice si è in. I trattini Version 'i' del corpo e non le parentesi di chiusura (il mio stile preferito), e i rientri versione 'a' le parentesi di chiusura al (la versione che è necessaria al lavoro).

Inoltre, è possibile applicare qualificazioni a '%' in comandi eseguiti in una shell:

:make %:r.o

Ciò sarebbe rendere il 'root' del nome del file corrente (che è '%:r') seguito da '.o'. O, in altre parole, se sto modificando somefile.c, questo esegue make somefile.o.

Aggiungere la riga qui sotto nella tua .vimrc

filetype trattino sulla

(sarà impostare la modalità di rientro destro a seconda del tipo di file)

Ho avuto questo stesso problema per un lungo periodo di tempo, fino a quando ho capito che autoindent e smartindent sono entrambi inutili se "trattino filetype on" è impostato nel vostro vimrc - 'filetype trattino sulla' utilizza il trattino / sh.vim (o qualsiasi altra cosa lingua) file nella directory vim per capire le regole di rientro, e autoindent e smartindent entrambi possono interferire con esso.

Non ho ancora testato questo con sh, ma perl improvvisamente ha iniziato a comportarsi correttamente quando sono passato.

Nota a margine: redirect di Juan, "Ripristino trattino dopo aver digitato hash", non è una buona soluzione - mentre non risolve il problema in una situazione (digitando il codice a), non cambia come l'editor pensa che dovrebbe rientrato, quindi una ri-trattino (= visivi, o == normale) sarà spingere di nuovo a sinistra.

Ho le seguenti righe nel mio Vimrc e non osservo il problema.

set smartindent
inoremap # X^H#

Ho usato per avere set autoindent dopo queste due righe, ma sembra che non ha alcun effetto.

Sì che è molto fastidioso. smartindent è davvero solo per C come le lingue. Vedere come mi permetto alla indentazione appropriata in base alla lingua alla: http://www.pixelbeat.org/settings/.vimrc

La risposta precedente che suggerisce:

: inoremap # X ^ H #

è eccellente. E 'la risposta suggerita dalla documentazione VIM presso ": help smartindent". Si noti che ^ H viene immesso utilizzando CTRL-V CTRL-H. La sezione pertinente dalla documentazione è al di sotto.

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top