Comment 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 recopie et colle le code dans un terminal distant et tout ça cogne. Je veux résoudre ce problème d’un seul coup.

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

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

edit: Aussi, je dois souligner qu’un résultat bien meilleur que = indenting peut généralement être obtenu en utilisant un programme externe. Par exemple, je cours :%!perltidy tout le temps. astyle, cindent, etc. peuvent également être utilisés. Et, bien sûr, vous pouvez les associer à un trait de touche – et en associer différentes à la même frappe en fonction du type de fichier.

Si vous voulez retrouver le bloc dans lequel vous vous trouvez sans avoir à taper d’accords, vous pouvez le faire:

 [[=]] 

Le maître de toutes les commandes est

gg=G

Cela indente le fichier entier!

Et voici quelques-unes des commandes simples et élégantes utilisées pour indenter rapidement des lignes dans Vim ou gVim.

Pour indenter toutes les lignes sous la ligne en cours

 =G 

Pour indenter la ligne en cours

 == 

Pour indenter n lignes sous la ligne actuelle

 n== 

Par exemple, pour indenter 4 lignes sous la ligne actuelle

 4== 

Pour indenter un bloc de code, accédez à l’une des accolades et utilisez la commande

 =% 

Vous pouvez utiliser une application / un utilitaire ordonné pour mettre en retrait les fichiers HTML et XML et cela fonctionne assez bien pour indenter ces fichiers.

Prettify un fichier XML

 :!tidy -mi -xml % 

Prettify un fichier HTML

 :!tidy -mi -html % 

appuyez sur Echap puis tapez rapidement les combinaisons suivantes:

 gg=G 

1G=G Cela devrait indenter toutes les lignes du fichier. 1G vous emmène sur la première ligne, = démarre l’indentation automatique et le dernier G vous emmène sur la dernière ligne du fichier.

Dans Vim, utilisez :insert . Cela gardera toute votre mise en forme et ne pas effectuer d’auto-indexation. Pour plus d’informations, help :insert .

:set paste est votre ami J’utilise du mastic et finis par copier le code entre les fenêtres. Avant que je ne sois allumé sur :set paste (et :set nopaste ) copy / paste m’a donné des ajustements pour cette raison.

Si vous ne voulez pas utiliser :set paste , cliquer avec le bouton du milieu, set nopaste , vous pouvez également coller le contenu du presse-papiers:

 "*p "+p 

De cette façon, vous n’avez pas à quitter le mode normal. Si vous devez coller + ou * selon la manière dont vous avez sélectionné le texte, consultez :help quoteplus .

vim-autoformat formate vos fichiers sources en utilisant des programmes externes spécifiques à votre langue, par exemple rbeautify “gem pour les fichiers Ruby,” js-beautify “npm pour JavaScript.

Pour les fichiers C ++ complexes, vim n’obtient pas toujours le bon format lors de l’utilisation de la commande vim = filter. 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 fait pas toujours les choses correctement), mais on peut également définir un formateur externe, comme astyle, en le configurant comme indiqué dans cette question .

vi devrait respecter les tabs et les espaces, mais vous devriez considérer que vi peut utiliser des tabs de longueur différente de celle de votre autre éditeur. Pouvez-vous être plus précis que “tout ça foiré”?

Pour les fichiers XML, j’utilise cette commande

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

Xmllint doit être installé (package libxml2-utils)

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

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

Celui-ci va indenter automatiquement le fichier entier et garder votre curseur dans la position que vous êtes:

 nmap ai mzgg=G`z 

Pour vi Editor, utilisez: insert. Cela gardera toute votre mise en forme et ne pas insérer l’indentation automatique. Une fois que vous avez terminé, appuyez sur Echap pour voir le fichier formaté, sinon vous verrez des caractères inutiles. comme ^ I par exemple:

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