appena avuto a risolvere questo problema esatto, così ho pensato di contribuire a salvare gli altri un po 'di tempo.
È possibile utilizzare gg=G
per indentare il codice. Ma le cose diventano difficili da capire nel momento in cui vuoi modificare come avviene l'indentazione automatica. Pertanto, se si cura solo che gli spazi bianchi errati vengano rimossi e non si preoccupino veramente dello stile di formattazione, gg=G
è il modo più rapido per farlo, perché è integrato.
Se si desidera controllare lo stile (ad esempio, si sta tentando di rendere il codice conforme a a style guide), sarà necessario uno strumento esterno per elaborare il file. Puoi richiamare questo strumento da dentro con: :%!<toolname> <options>
. Ciò convoglia il file attraverso lo strumento e ricarica il risultato elaborato. (Puoi ovviamente usarlo per qualsiasi altra cosa tu voglia fare al tuo file)
Quindi la prossima domanda è, quale strumento esterno dovresti scegliere? Indipendentemente da ciò, il metodo è lo stesso:
- installare lo strumento di scelta
- assicurarsi che il suo nel tuo percorso
- aggiungere una riga al vostro file vimrc che crea un tasto di scelta rapida da utilizzare in modo da risparmiare tempo
- Usalo.
Ora, quale strumento si utilizza dipende dallo stile che si sta tentando di replicare. Se stai cercando di replicare uno stile ampiamente utilizzato, è probabile che lo astyle sia tutto ciò di cui hai bisogno.
Se stai cercando di replicare uno stile personalizzato, allora si avrà bisogno di due cose:
- UniversalIndentGui - un front-end che permette di giocare con diverse opzioni e live-anteprima il loro effetto sulla fonte presentare
- Un insieme di strumenti di formattazione di origine codice installato e nel tuo percorso
Tra uncrustify e greatcode, si dovrebbe essere in grado di replicare completamente lo stile che si desidera.
In realtà, ho mentito. C'è un altro modo e si chiama clang-format. Tuttavia, vorrai leggere la documentazione su di esso e la sua ancora nelle prime fasi, quindi alcune opzioni non funzionano molto bene. È comunque uno strumento bellissimo (sicuramente il più intelligente del lotto perché costruisce un AST del tuo codice) ed è persino disponibile per Windows.
Se avete intenzione di leggere il manuale, volete anche dare un'occhiata allo GNU Indent.
Naturalmente, c'è l'ultimo modo, che in realtà richiede tempo per imparare le regole del rientro di Vim e scriverne uno per il tuo stile. Ci vorrà del tempo, ma funzionerà con gg=G
.
Alcune note sul astyle vs Uncrustify vs greatcode:
- Astyle è un bene per la formattazione generale, ma non può fare le cose come allineare la dichiarazione di variabili e commenti ri-stile molto bene.
- Uncrustify può fare un sacco di cose che lo stile non può, ma essere pronti a passare un'ora a giocare finché non hai trovato la giusta combinazione di opzioni che ti servono. (Oppure se hai voglia di perdere un sacco di tempo, usa gli algoritmi genetici per capire la migliore combinazione di opzioni per il tuo stile e quando condividi il codice e dammi un link così posso usarlo :))
Si noti che non è necessario scegliere uno strumento. Con vim, puoi mappare una sequenza di tasti per eseguire più comandi in successione, quindi in teoria potresti usare una combinazione di questi strumenti per ottenere esattamente ciò che stai cercando.
Ultimo ma non meno importante, ecco un estratto dal mio file .vimrc, dove ho mappato F12 per richiamare astyle con alcune opzioni:
"A2 = attached brackets
"-s8 indent 8 spaces
"-xc attached braces to class declarations
"-xj remove braces for single statement ifs and elses
"-c convert tabs to spaces in the non-indentation part of the line
map <F12> :%!astyle -A2 -s8 -xc -xj -c<CR>
Non giudicarmi sullo stile. Basta usare lo strumento per riprodurre ciò che desideri.
wow, questo è davvero grandioso, grazie mille – flow
È possibile mappare questo a una combinazione di tasti come ctrl + shift + F? –
Puoi anche eseguire l'override dell'operatore di rientro di Vim ('=') per usare Astyle impostando 'equalprg' su astyle (es:' set equalprg = ~/astyle \ --style = google') – Parsa