Lorsque je copie le code d'un autre fichier, le formatage est perturbé, comme ceci:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Comment puis-je formater automatiquement ce code dans vim?
Essayez les frappes suivantes:
gg=G
Explication: gg
va au début du fichier, =
est une commande permettant de réparer l'indentation et G
lui indique 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 outil de saisie, de mise en forme et d’embellissement de code source destiné aux langages de programmation C, C++, C # et Java.
Il fonctionne sous Windows, Linux et Mac. Cela fera des choses comme indenter, remplacer les tabulations par des espaces ou vice-versa, mettre des espaces autour des opérations comme vous le souhaitez (convertir if(x<2)
en if ( x<2 )
si c'est comme ça que vous aimez), mettre des accolades sur le même line en tant que définitions de fonction, ou en les déplaçant sur la 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. Donc, 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 qui me conviennent. Ensuite, je peux taper gg pour aller en haut du fichier, et gqG formater le fichier entier selon mes normes. Si je n'ai besoin de reformater qu'une seule fonction, je peux aller en haut de la fonction, puis taper gq][ et il va reformater juste cette fonction.
Les options que j'ai pour astyle, -T4pb
, ne sont que mes préférences. Vous pouvez regarder à travers leur documentation , et changer les options pour le formater à votre guise.
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 ça t'as aidé.
Le PO a demandé le formatage automatique, mais a accepté une réponse qui effectue uniquement un retrait automatique.
Voici la différence:
ORIGINAL
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
AUTOINDENT
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
FORMAT AUTOMATIQUE
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
La commande intégrée pour bien indenter le code a déjà été mentionnée (gg=G
). Si vous voulez embellir le code, vous devrez utiliser une application externe telle que indent . Puisque %
désigne 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 tampon) avec une seule commande: https://github.com/Chiel92/vim-autoformat . Il utilise des programmes de format externe pour cela, avec un retour à la fonctionnalité d'indentation de vim.
Je trouve que clang-format
fonctionne bien.
Il existe quelques exemples de combinaisons de touches dans le documentation clang
Je préfère utiliser la liaison equalprg
dans vim. Cela vous permet d'appeler clang-format
avec G=gg
ou d'autres options =
indent.
Il suffit de mettre ce qui suit dans votre fichier .vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
Peut-être que vous pouvez essayer ce qui suit $ indent -kr -i8 * .c
J'espère que c'est utile pour vous!
J'aime indent
comme mentionné ci-dessus, mais le plus souvent, je ne souhaite formater qu'une petite partie du fichier sur lequel je travaille. Puisque indent
peut prendre le code de stdin, c’est vraiment simple:
:!indent
.astyle
prend stdin aussi, vous pouvez donc utiliser la même astuce ici.
Je voulais ajouter que, pour éviter toute confusion, vous pouvez taper :set paste
avant de coller. Après avoir collé, vous pouvez taper :set nopaste
pour des choses comme js-beautify et indenting pour fonctionner à nouveau.
Leur est un outil appelé indent
. Vous pouvez le télécharger avec apt-get install indent
, puis lancer indent my_program.c
.