web-dev-qa-db-fra.com

Comment puis-je réparer l'indentation d'un fichier entier dans Vi?

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

Souvent, je vais copier et coller du code dans un terminal distant et tout gâcher. Je veux résoudre ce problème d'un seul coup.

589
mmcdole

=, la commande indent peut prendre des mouvements. Donc, gg pour obtenir le début du fichier, = à indenter, G à la fin du fichier, gg=G.

1124
Logan Capaldo

Avant de coller dans le terminal, essayez :set paste (puis :set nopaste après avoir terminé). Cela désactivera les fonctionnalités d'indentation automatique, de retour à la ligne, etc. qui gâchent votre collage.

edit: En outre, je devrais souligner qu'un résultat bien meilleur que = indenting peut généralement être obtenu en utilisant un programme externe. Par exemple, je lance :%!perltidy tout le temps. astyle, cindent, etc. peuvent également être utilisés. Et, bien sûr, vous pouvez les mapper sur un trait de clé - et mapper ceux qui sont différents sur la même frappe en fonction du type de fichier

119
derobert

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

[[=]]
28
Andrew Wagner

Le maître de toutes les commandes est

gg=G

Cela indente le fichier entier!

Vous trouverez ci-dessous certaines des commandes simples et élégantes utilisées pour mettre rapidement en retrait des lignes dans Vim ou gVim.

Pour indenter toutes les lignes en dessous de la ligne en cours

=G

Pour indenter la ligne courante

==

Pour mettre en retrait n lignes au-dessous de la ligne actuelle

n==

Par exemple, pour mettre en retrait 4 lignes en dessous de la ligne en cours

4==

Pour mettre en retrait un bloc de code, accédez à l’un des accolades et utilisez la commande

=%
20
Sagar Jain

Vous pouvez utiliser tidy application/utility pour indenter des fichiers HTML et XML et cela fonctionne assez bien pour indenter ces fichiers.

Prettify un fichier XML

:!tidy -mi -xml %

Confirmez un fichier HTML

:!tidy -mi -html %
17
Naga Kiran

appuyez sur echap et tapez les combinaisons ci-dessous rapidement:

gg=G
14
tokhi

1G=G. Cela devrait indenter toutes les lignes du fichier. 1G vous prend la première ligne, = démarre l'indentation automatique et la dernière variable G vous prendra la dernière ligne du fichier.

11
Amjith

Dans Vim, utilisez :insert. Ceci gardera toute votre mise en forme et ne fera pas d’indentation automatique. Pour plus d'informations help :insert

7
Eric Johnson

:set paste est votre ami. J'utilise PuTTY et je copie le code entre fenêtres. Avant, on me permettait de copier/coller :set paste (et :set nopaste) pour cette raison.

7
Elsporko

si vous ne souhaitez pas utiliser :set paste, clic-médian, set nopaste, vous pouvez également coller le contenu du presse-papiers:

"*p
"+p

Ainsi, vous ne devez pas quitter le mode normal . Si vous devez coller + ou * dépend de la façon dont vous avez sélectionné le texte, voir :help quoteplus.

6
0x89

vim-autoformat formate vos fichiers source à l’aide de programmes externes spécifiques à votre langue, par exemple. rbeautify "bijou pour les fichiers Ruby", le package "js-beautify" npm pour JavaScript.

4
Wojtek Kruszewski

Pour les fichiers C++ complexes, vim n'obtient pas toujours le formatage correct lors de l'utilisation de la commande de filtre = de vim. Donc, dans de telles situations, il est préférable d’utiliser un formateur externe C++ comme astyle (ou uncrustify ), par exemple:

:%!astyle

La fonction '=' de Vim utilise son formateur interne par défaut (ce qui ne donne pas toujours raison), mais on peut également le configurer avec un formateur externe, comme astyle, en le configurant correctement comme indiqué dans cette question

3
Pierz

Pour les fichiers XML, j'utilise cette commande

:1,$!xmllint --format --recover - 2>/dev/null

Vous devez avoir installé xmllint (paquet libxml2-utils)

(Source: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html )

2
alphayax

vi devrait respecter les tabulations et les espaces, cependant vous devriez considérer que vi peut utiliser des tabulations de longueur différente de celle de votre autre éditeur. Pouvez-vous être plus spécifique que "tout foiré"?

2
Zachery Delafosse

Vous pouvez créer un mappage pour le faire pour vous.

Celui-ci mettra automatiquement en retrait tout le fichier tout en maintenant votre curseur dans la position où vous vous trouvez:

nmap <leader>ai mzgg=G`z
1
Sergio D. Márquez

Pour vi Editor, utilisez: insert. Cela conservera toute votre mise en forme et ne pas insérer d'indentation automatique. Une fois terminé, appuyez sur échap pour afficher le fichier formaté, sinon vous verrez des caractères parasites. comme ^ I .__, par exemple:

public static void main(String[] args) {
^I
^I System.out.println("Some Garbage printed upon using :insert"); 
}
0
Priya Sharma

Il suffit d’aller en mode visuel dans vim et d’effectuer une sélection après avoir appuyé sur =, toutes les lignes sélectionnées seront mises en retrait.

0
Ramanand Yadav