665 votes

Comment fixer l'indentation d'un fichier entier dans Vi ?

Dans Vim, quelle est la commande permettant de corriger l'indentation de toutes les lignes ?

Il m'arrive souvent de copier et de coller du code dans un terminal distant et de tout mélanger. Je veux régler ce problème en une seule fois.

0 votes

8 votes

Mieux vaut prévenir que guérir. Dans cet esprit, voici un commentaire. Faites un ":set paste" avant d'entrer en mode insertion et de coller du code depuis un terminal distant.

1277voto

Logan Capaldo Points 22145

= la commande indentation peut prendre des mouvements. Donc, gg pour obtenir le début du fichier, = pour mettre en retrait, G à la fin du fichier, gg=G .

43 votes

Je ne serai jamais capable de désapprendre mon précieux 1G =) L'un de mes préférés est =% debout sur un support d'ouverture. Il fixe les indentations de tout le bloc.

2 votes

:0<return> n'est pas si mal mais gg est bien (oui, j'ai appris ed en premier).

8 votes

Puis-je mettre en retrait tout le fichier sans quitter la ligne en cours ?

130voto

derobert Points 26258

Avant de coller dans le terminal, essayez :set paste et ensuite :set nopaste après avoir terminé. Cela désactivera l'indentation automatique, le retour à la ligne et les autres fonctions qui perturbent votre collage.

edit : Aussi, je dois souligner qu'un bien meilleur résultat que = L'indentation peut généralement être obtenue en utilisant un programme externe. Par exemple, j'exécute :%!perltidy tout le temps. astyle , cindent etc. peuvent également être utilisés. Et, bien sûr, vous pouvez les associer à une touche, et associer différentes touches à la même touche en fonction du type de fichier.

5 votes

Vous pouvez régler le equalprg dans un ftplugin pour utiliser un filtre extérieur pour = l'indentation, plutôt qu'un raccourci clavier personnalisé.

0 votes

Il y a aussi une option de liaison par touche de type pastetoggle, par exemple : :set pt \p pour passer d'un mode à l'autre

0 votes

Note : dans le vimconfig de grml, la touche pastetoggle est affectée à F11.

31voto

Andrew Wagner Points 1958

Si vous voulez réindenter le bloc dans lequel vous vous trouvez sans avoir à taper d'accords, vous pouvez le faire :

[[=]]

1 votes

Désolé de relancer cette question, mais qu'entendiez-vous par "accords" ? Des accords ?

7 votes

Le terme "accords" désigne ici les commandes émises en maintenant une touche enfoncée tout en appuyant sur une autre, par analogie avec les accords musicaux où plusieurs notes sonnent en même temps. Ainsi, G est shift+g, ^] est ctrl+], et ainsi de suite. Ces commandes sont plus longues à taper que les commandes à touche unique.

0 votes

Vous pouvez également utiliser =aB qui ne déplacera pas le curseur du tout.

17voto

Naga Kiran Points 2985

Vous pouvez utiliser l'application/utilité tidy pour indenter les fichiers HTML et XML et elle fonctionne assez bien pour indenter ces fichiers.

Embellir un fichier XML

:!tidy -mi -xml %

Embellir un fichier HTML

:!tidy -mi -html %

12voto

Amjith Points 6850

1G=G . Cela devrait mettre en retrait toutes les lignes du fichier. 1G vous amène à la première ligne, = lancera l'auto-indentation et le dernier G vous amènera à la dernière ligne du fichier.

0 votes

Ou même 1gg=G

0 votes

1G=G l'a réparé pour moi. C'est génial !

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