Lorsque je copie du code à partir d'un autre fichier, le formatage est foiré, comme ceci:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Comment puis-je mettre en forme automatiquement ce code dans vim?
Lorsque je copie du code à partir d'un autre fichier, le formatage est foiré, comme ceci:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Comment puis-je mettre en forme automatiquement ce code dans vim?
Réponses:
Essayez les frappes suivantes:
gg=G
Explication: gg
va en haut du fichier, =
est une commande pour corriger l'indentation et lui G
dit d'effectuer l'opération jusqu'à la fin du fichier.
J'aime utiliser le programme Artistic Style. Selon leur site Web :
Artistic Style est un indenteur, un formateur et un embellisseur de code source pour les langages de programmation C, C ++, C # et Java.
Il fonctionne sous Windows, Linux et Mac. Cela fera des choses comme le retrait, le remplacement des tabulations par des espaces ou vice-versa, la mise en place des espaces autour des opérations comme vous le souhaitez (conversion if(x<2)
en si ( x<2 )
si vous le souhaitez), la mise en accolade sur la même ligne que les définitions de fonction, ou leur déplacement vers le ligne ci-dessous, etc. Toutes les options sont contrôlées par des paramètres de ligne de commande.
Pour l'utiliser dans vim, définissez simplement l'option formatprg, puis utilisez la commande gq. Ainsi, par exemple, j'ai dans mon .vimrc:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb
de sorte que chaque fois que j'ouvre un fichier .cpp, formatprg est défini avec les options que j'aime. Ensuite, je peux taper gg pour aller en haut du fichier et gqGformater le fichier entier selon mes standards. Si je n'ai besoin que de reformater une seule fonction, je peux aller en haut de la fonction, puis taper gq][et elle reformatera juste cette fonction.
Les options que j'ai pour astyle -T4pb
, ne sont que mes préférences. Vous pouvez parcourir leurs documents et modifier les options pour qu'il formate le code comme vous le souhaitez.
Voici une démo. Avant astyle:
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Après astyle (gggqG):
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
J'espère que cela pourra aider.
La commande intégrée pour indenter correctement le code a déjà été mentionnée ( gg=G
). Si vous souhaitez embellir le code, vous devrez utiliser une application externe comme l' indentation . Puisque %
dénote le fichier actuel en mode ex, vous pouvez l'utiliser comme ceci:
:!indent %
Le plugin vim-autoformat vous permet de formater votre tampon (ou sélections de tampons) avec une seule commande: https://github.com/Chiel92/vim-autoformat . Il utilise des programmes de format externe pour cela, avec un repli sur la fonctionnalité d'indentation de vim.
Je trouve que ça clang-format
marche bien.
Il existe des exemples de raccourcis clavier dans la documentation de Clang
Je préfère utiliser la equalprg
reliure en vim. Cela vous permet d'appeler clang-format
avec G=gg
ou d'autres =
options de retrait.
Mettez simplement ce qui suit dans votre fichier .vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
sudo apt install clang-format
J'aime comme indent
mentionné ci-dessus, mais le plus souvent, je ne souhaite formater qu'une petite section du fichier sur lequel je travaille. Puisque indent
peut prendre le code de stdin, c'est vraiment simple:
:!indent
.astyle
prend également stdin, vous pouvez donc utiliser la même astuce.
Je voulais ajouter que pour éviter qu'il ne soit gâché en premier lieu, vous pouvez taper :set paste
avant de coller. Après avoir collé, vous pouvez taper :set nopaste
pour des choses comme js-embellir et mettre en retrait pour travailler à nouveau.
:set paste!
pour cela, qui bascule la valeur de collage au lieu de la définir. Cela facilite la désactivation car vous pouvez simplement faire défiler en arrière quelques commandes et appuyer sur Entrée.