294 votes

Comment puis-je auto-formater/indenter du code C dans vim ?

Lorsque je copie du code à partir d'un autre fichier, la mise en forme est modifiée, comme ceci :

fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}

Comment puis-je auto-formater ce code dans vim ?

4 votes

Pour ceux qui cherchent à formater et non seulement à indenter le code, la deuxième réponse (la mienne) aborde cela. Si vous voulez simplement corriger l'indentation, la réponse acceptée est la manière la plus simple.

0 votes

Ce plugin peut aider vimawesome.com/plugin/vim-autoformat vous pouvez l'installer et utiliser :Autoformat pour formater le code

668voto

Amir Rachum Points 13236

Essayez les frappes suivantes :

gg=G

Explication : gg va en haut du fichier, = est une commande pour corriger l'indentation et G lui dit d'effectuer l'opération jusqu'à la fin du fichier.

36 votes

Cela ne fait que mettre en retrait le code. Est-il possible de FORMATER AUTOMATIQUEMENT le tout ?

3 votes

@Ton van : Voir ma réponse pour la différence (Impossible à expliquer ici dans les commentaires).

3 votes

-1 Cela ne fait que corriger l'indentation, pas la mise en forme (ce qui était demandé).

91voto

Derek Points 1558

J'aime utiliser le programme Artistic Style. Selon leur site web:

Artistic Style est un formateur de code source, de code et d'embellissement pour les langages de programmation C, C++, C# et Java.

Il fonctionne sous Windows, Linux et Mac. Il fera des choses comme l'indentation, 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 vous le souhaitez), mettre les accolades sur la même ligne que les définitions de fonctions, ou les déplacer à la ligne en dessous, etc. Toutes les options sont contrôlées par des paramètres en ligne de commande.

Pour l'utiliser dans vim, il suffit de définir l'option formatprg avec, et ensuite utiliser la commande gq. Par exemple, j'ai dans mon .vimrc:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb

ainsi chaque fois que j'ouvre un fichier .cpp, formatprg est défini avec les options que j'aime. Alors, je peux taper gg pour aller en haut du fichier, et gqG pour formater l'ensemble du fichier selon mes normes. Si je dois juste reformater une seule fonction, je peux aller en haut de la fonction, puis taper gq][ et il reformate juste cette fonction.

Les options que j'ai pour astyle, -T4pb, ne sont que mes préférences. Vous pouvez parcourir leurs docs, et modifier les options pour faire en sorte 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;
}

3 votes

Est-ce qu'il y a quelque chose de similaire pour d'autres formats : Ruby, XML, JSON, etc.?

2 votes

@Ryan vérifiez vim-autoformat, voir réponse ci-dessous. BTW vim-autoformat utilise également astyle entre autres.

1 votes

Merci! Je commençais à penser que j'étais la seule personne au monde qui ne voulait pas que ses crochets d'ouverture soient sur la même ligne que la déclaration de la fonction!

56voto

Lazer Points 15696

Le demandeur a demandé un formatage automatique, mais a accepté une réponse qui ne fait que l'indentation 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;
}

AUTOFORMAT

int main()
{
    if (x < 2)
    {
        x = 3;
    }
}

float test()
{
    if (x < 2)
        x = 3;
}

33voto

soulmerge Points 37314

La commande intégrée pour indenter correctement le code a déjà été mentionnée (gg=G). Si vous voulez embellir le code, vous devrez utiliser une application externe comme indent. Puisque % désigne le fichier actuel en mode ex, vous pouvez l'utiliser de cette manière:

:!indent %

0 votes

Avant d'utiliser cette commande, assurez-vous de faire sudo apt install indent pour installer l'utilitaire indent.

19voto

Chiel92 Points 2362

Le plugin vim-autoformat vous permet de formater votre tampon (ou les sélections de tampon) avec une seule commande : https://github.com/vim-autoformat/vim-autoformat. Il utilise des programmes de format externes pour cela, avec un retour à la fonctionnalité d'indentation de vim en cas de problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X