Comment puis-je autoformat / indenter le code C dans vim?
Lorsque je copie du code d'un autre fichier, le formatage est foiré, comme ceci:
fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}
Comment puis-je autoformater ce code dans vim?
10 réponses
Essayez les frappes suivantes:
gg=G
Explication: gg
va vers le haut du fichier, =
est une commande pour fixer l'indentation et G
dit-il pour effectuer l'opération à la fin du fichier.
J'aime utiliser le style artistique du programme. Selon leur site web :
Artistic Style est un pénétrateur de code source, un formateur et un embellisseur pour les langages de programmation C, C++, C# et Java.
Il fonctionne dans Window, Linux et Mac. Il fera des choses comme indenter, remplacer les onglets par des espaces ou vice-versa, mettre des espaces autour des opérations comme vous le souhaitez (convertir {[3] } en if ( x<2 )
si c'est comme ça que vous l'aimez), mettre des accolades sur la même ligne que définitions de fonction, ou les déplacer vers 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. 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 gqG {[20] } pour formater le fichier entier en fonction de mon norme. Si j'ai seulement besoin de reformater une seule fonction, je peux aller en haut de la fonction, puis tapez gq][ et il va reformater juste que la fonction.
Les options que j'ai pour astyle, -T4pb
, ne sont que mes préférences. Vous pouvez regarder à travers leurs documents, et changer 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 aider.
L'OP 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;
}
AUTOINDENTS
int main(){if(x<2){x=3;}}
float test()
{
if(x<2)
x=3;
}
Mise en forme automatique
int main()
{
if (x < 2)
{
x = 3;
}
}
float test()
{
if (x < 2)
x = 3;
}
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 aurez besoin d'utiliser une application externe, comme tiret. Depuis %
désigne le fichier courant 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 repli sur la fonctionnalité d'indentation de vim.
, je trouve que clang-format
fonctionne bien.
Il y a quelques exemples de raccourcis clavier dans la 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 de retrait =
.
Il suffit de mettre ce qui suit dans votre .fichier vimrc:
autocmd FileType c,cpp setlocal equalprg=clang-format
J'aime {[0] } comme mentionné ci-dessus, mais le plus souvent je veux formater seulement une petite section du fichier sur lequel je travaille. Puisque indent
peut prendre du code à partir de stdin, c'est vraiment simple:
- Sélectionnez le bloc de code que vous souhaitez formater avec V, ou similaires.
- formater en tapant
:!indent
.
astyle
prend stdin aussi, de sorte que vous pouvez utiliser la même astuce là-bas.
Peut-être que vous pouvez essayer les éléments suivants $tiret -kr -i8 *.c
J'espère que c'est utile pour vous!
Je voulais ajouter, que pour l'empêcher d'être foiré en premier lieu, vous pouvez taper :set paste
avant de le 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 indent
, puis exécutez indent my_program.c
.