Comment puis-je formater / mettre en retrait le code C dans vim?

Lorsque je copie du code à partir d’un autre fichier, le formatage est perturbé, comme ceci:

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

Comment puis-je formater ce code dans vim?

Essayez les frappes de touches suivantes:

 gg=G 

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

J’aime utiliser le programme Artistic Style. Selon leur site internet :

Artistic Style est un code source indenter, formater et embellir les langages de programmation C, C ++, C # et Java.

Il fonctionne sous Windows, Linux et Mac. Il fera des choses comme mettre en retrait, remplacer des tabulations par des espaces ou vice-versa, en mettant des espaces autour des opérations comme vous le souhaitez (convertir if(x<2) en if ( x<2 ) si cela vous plait). même ligne que les définitions de fonction, ou les déplacer vers la ligne ci-dessous, etc. Toutes les options sont contrôlées par des parameters 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 que j'aime. Ensuite, je peux taper gg pour aller en haut du fichier et g q G pour formater le fichier entier selon mes normes. Si je n'ai besoin que de reformater une seule fonction, je peux aller en haut de la fonction, puis taper g q ] [ et il reformatera simplement 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 que le code soit formaté 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.

L’OP a demandé une mise en forme automatique, mais a accepté une réponse faisant 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 l’indentation correcte du code a déjà été mentionnée ( gg=G ). Si vous souhaitez embellir le code, vous devez utiliser une application externe telle que l’ indentation . Puisque % désigne le fichier actuel en mode ex, vous pouvez l’utiliser comme ceci:

 :!indent % 

Le plug-in vim-autoformat vous permet de formater votre tampon (ou les 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 le clang-format fonctionne bien.

Il y a quelques exemples de raccourcis dans la documentation de clang

Je préfère utiliser la liaison equalprg dans vim. Cela vous permet d’invoquer clang-format avec G=gg ou d’autres options d’indentation.

Il suffit de mettre ce qui suit dans votre fichier .vimrc:

 autocmd FileType c,cpp setlocal equalprg=clang-format 

J’aime indent comme mentionné ci-dessus, mais le plus souvent je veux formater seulement une petite partie du fichier sur lequel je travaille. Comme l’ indent peut prendre le code de stdin, c’est vraiment simple:

  1. Sélectionnez le bloc de code que vous souhaitez formater avec V ou similaire.
  2. Formatez en tapant :!indent .

astyle prend également stdin, vous pouvez donc utiliser le même tour.

Peut-être que vous pouvez essayer les éléments suivants: $ indent -kr -i8 * .c

J’espère que c’est utile pour vous!

Je voulais append que, pour éviter qu’il ne soit désordonné en premier lieu, vous pouvez taper :set paste avant coller. Après avoir collé, vous pouvez taper :set nopaste pour des choses comme js-beautify et indenting to again.

Leur est un outil appelé indent . Vous pouvez le télécharger avec apt-get indent indent my_program.c , puis exécuter indent my_program.c .