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.
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.
Réponses:
=
, la commande de retrait peut accepter des mouvements. Donc, gg
pour obtenir le début du fichier, =
au tiret, G
à la fin du fichier, gg=G
.
''
(deux guillemets simples) vous ramène à l'endroit où vous étiez si vous gg=G''
deviez mettre en retrait puis revenir.
Avant de coller dans le terminal, essayez :set paste
puis :set nopaste
après avoir terminé. Cela désactivera le retrait automatique, le retour à la ligne et d'autres fonctionnalités qui gâchent votre pâte.
edit: Aussi, je dois souligner qu'un résultat bien meilleur que l' =
indentation 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 mapper à un coup de clé et en mapper différents sur la même frappe en fonction du type de fichier.
equalprg
option dans un plugin ft pour utiliser un filtre externe pour l' =
indentation, plutôt qu'une liaison de touches personnalisée.
formatpgm
avec rangé et astyle puis gq
. Voici quelques exemples de mon .vimrc
: au FileType xml set fp=tidy\ -q\ -i\ -xml
etau FileType java set fp=/usr/local/bin/astyle\ --mode=java\ --indent=tab
Si vous voulez réindenter le bloc dans lequel vous vous trouvez sans avoir à taper d'accords, vous pouvez faire:
[[=]]
=aB
ce qui ne déplacera pas du tout le curseur.
[[=]]
nécessite 5 accords :(
Le maître de toutes les commandes est
gg=G
Cela indente l'intégralité du fichier!
Et voici quelques-unes des commandes simples et élégantes utilisées pour indenter rapidement des lignes dans Vim ou gVim.
Pour mettre en retrait toutes les lignes sous la ligne actuelle
=G
Pour mettre en retrait la ligne actuelle
==
Pour mettre en retrait des n
lignes sous la ligne actuelle
n==
Par exemple, pour mettre en retrait 4 lignes sous la ligne actuelle
4==
Pour mettre en retrait un bloc de code, accédez à l'un des accolades et utilisez la commande
=%
Vous pouvez utiliser une application / un utilitaire bien rangé pour mettre en retrait des fichiers HTML et XML et cela fonctionne assez bien pour mettre en retrait ces fichiers.
Prettifier un fichier XML
:!tidy -mi -xml %
Prettifier un fichier HTML
:!tidy -mi -html %
appuyez sur Échap, puis tapez rapidement les combinaisons ci-dessous:
gg=G
1G=G
. Cela devrait mettre en retrait toutes les lignes du fichier. 1G
vous prend la première ligne, =
démarre le retrait automatique et la finale G
vous prend la dernière ligne du fichier.
1gg=G
Dans Vim, utilisez :insert
. Cela conservera toute votre mise en forme et ne fera pas d'indentation automatique. Pour plus d'informations help :insert
.
si vous ne souhaitez pas utiliser :set paste
, cliquez 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 *
dépend de la façon dont vous avez sélectionné le texte, voir :help quoteplus
.
vim-autoformat formate vos fichiers sources à l'aide de programmes externes spécifiques à votre langue, par exemple la gemme "rbeautify" pour les fichiers Ruby, le package npm "js-beautify" pour JavaScript.
Pour les fichiers C ++ complexes, vim n'obtient pas toujours le bon formatage lors de l'utilisation de la =
commande de filtre de vim . Donc, pour de telles situations, il est préférable d'utiliser un formateur C ++ externe comme astyle (ou non crustify ), par exemple:
:%!astyle
La fonction '=' de Vim utilise son formateur interne par défaut (ce qui ne fait pas toujours bien les choses) mais on peut également le configurer en utilisant un formateur externe, comme astyle, en le configurant correctement comme discuté dans cette question .
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 )
Vous pouvez créer un mappage pour le faire pour vous.
Celui-ci mettra automatiquement en retrait tout le fichier et gardera toujours votre curseur dans la position où vous vous trouvez:
nmap <leader>ai mzgg=G`z
Passez simplement en mode visuel dans vim, et sélectionnez de haut en bas après avoir sélectionné simplement appuyez sur =, toute la ligne sélectionnée sera indentée.
ggvG=
quand tu peux gg=G
. Quel était l'intérêt de rendre la motion visible? Cela vaut pour toutes les actions qui prennent des motions.