Quando copio il codice da un altro file, la formattazione è incasinata, in questo modo:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Come posso formattare automaticamente questo codice in vim?
Quando copio il codice da un altro file, la formattazione è incasinata, in questo modo:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Come posso formattare automaticamente questo codice in vim?
Risposte:
Prova le seguenti sequenze di tasti:
gg=G
Spiegazione: gg
va all'inizio del file, =
è un comando per correggere il rientro e gli G
dice di eseguire l'operazione fino alla fine del file.
Mi piace usare il programma Artistic Style. Secondo il loro sito Web :
Lo stile artistico è un indentatore di codice sorgente, formattatore ed estetista per i linguaggi di programmazione C, C ++, C # e Java.
Funziona su Windows, Linux e Mac. Farà cose come il rientro, la sostituzione di schede con spazi o viceversa, mettendo gli spazi attorno alle operazioni come preferisci (convertendole if(x<2)
in se ( x<2 )
è così che ti piace), mettendo parentesi graffe sulla stessa linea delle definizioni delle funzioni o spostandole nella riga in basso, ecc. Tutte le opzioni sono controllate dai parametri della riga di comando.
Per usarlo in vim, basta impostare l'opzione formatprg su di esso, quindi usare il comando gq. Quindi, per esempio, ho nel mio .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
così ogni volta che apro un file .cpp, formatprg viene impostato con le opzioni che mi piacciono. Quindi, posso digitare gg per andare all'inizio del file e gqGper formattare l'intero file secondo i miei standard. Se ho solo bisogno di riformattare una singola funzione, posso andare all'inizio della funzione, quindi digitare gq][e riformatterà solo quella funzione.
Le opzioni che ho per astyle -T4pb
sono solo le mie preferenze. Puoi consultare i loro documenti e modificare le opzioni per formattarlo nel modo che preferisci.
Ecco una demo. Prima di astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Dopo astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
Spero che aiuti.
Il plug-in vim-autoformat consente di formattare il buffer (o le selezioni del buffer) con un singolo comando: https://github.com/Chiel92/vim-autoformat . Per questo utilizza programmi di formattazione esterna, con un fallback alla funzionalità di rientro di Vim.
Trovo che clang-format
funzioni bene.
Ci sono alcune combinazioni di tasti di esempio nella documentazione di clang
Preferisco usare l' equalprg
associazione in vim. Ciò consente di invocare clang-format
con G=gg
o altre =
opzioni di rientro.
Inserisci quanto segue nel tuo file .vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
Mi piace indent
come menzionato sopra, ma molto spesso voglio formattare solo una piccola sezione del file su cui sto lavorando. Dal momento che indent
può prendere il codice da stdin, è davvero semplice:
:!indent
.astyle
prende anche lo stdin, quindi puoi usare lo stesso trucco lì.
Volevo aggiungere che per evitare che si incasinasse in primo luogo è possibile digitare :set paste
prima di incollare. Dopo aver incollato, puoi digitare :set nopaste
cose come js-beautify e rientrare per funzionare di nuovo.
:set paste!
questo, che attiva o disattiva il valore incolla. Ciò semplifica lo spegnimento poiché puoi semplicemente scorrere indietro di alcuni comandi e premere Invio.