Existe-t-il un moyen de désarchiver automatiquement tout dans votre fichier source à l'aide d'une commande? [fermé]

11

Et puis pour ré-indenter automatiquement après cela? J'ai essayé de copier du code d'un écran de terminal à un autre, mais la tabulation a tout gâché.

Je ne savais pas comment appeler cette fonctionnalité, il était donc difficile pour moi de la trouver sur Google (qui renvoyait généralement des éléments liés à la façon de définir la taille des onglets, ce qui n'était malheureusement pas ce que je cherchais).

Templier noir
la source
1
Je vote pour fermer cette question comme hors sujet car il s'agit d'un outil de programmation. Les questions sur les outils sont mieux adaptés à StackOverflow , ou dans ce cas, Vi.SE . Cependant, cette question est trop ancienne pour migrer.
1
Je vote pour fermer cette question hors sujet , car il est sur l'utilisation d'un outil spécifique et aurait dû être demandé sur le débordement de pile ou (si on lui demandait maintenant) vi.se .

Réponses:

9

Vim dispose d'une retabcommande qui vous permet de tabuler ou de dénaturer votre document. Il utilise des paramètres tels que tabstopet expandtab. Donc, si vous souhaitez remplacer les tabulations par des espaces, vous pouvez procéder comme suit:

:%retab

Voir la retabdocumentation pour plus de détails.

Caveat Emptor : cela remplace également les onglets qui ne sont PAS au début d'une ligne. Donc, si vous utilisez des onglets durs au milieu des chaînes, ils seront également remplacés.

Kaleb Pederson
la source
3
En général, il est considéré comme une mauvaise idée d'inclure un véritable onglet dans une chaîne de toute façon. Cela peut toujours se produire, mais \tc'est préférable, juste pour éviter ce genre de problèmes.
Spencer Rathbun
6

Pour développer la réponse de @ Kaleb (je n'ai pas encore de représentant à commenter), avant d'exécuter la commande retab, vous devrez le faire :set expandtab (set et). Sinon, le retab ne remplacera pas les tabulations par des espaces.

De plus, vous pouvez spécifier les tabstops. Souvent, dans le code source créé par d'autres, le code est écrit avec des tabstops définis sur 4 ou même 2. Avant d' :%retabexécuter la commande, testez différents tabstops. Essayer

:set ts=8 (the default)
:set ts=4 
:set ts=2  

pour voir quel réglage a le plus de sens.

Pour reculer (en remplaçant les espaces par les caractères TAB appropriés, utilisez

:set noet
:%retab!
Firstrock
la source
1

Par dé-tabulation, entendez-vous changer les tabulations en espaces? Si c'est le cas, remplacez les espaces par des tabulations dans le tampon entier comme ceci:

:%s/^I/    /g

C'est quatre espaces sur le côté droit de la substitution, mais vous pouvez en faire le nombre que vous voulez. Pour obtenir le ^Icaractère d'onglet littéral , vous pouvez appuyer sur ^Vsuivi de la touche Tab.

Vous pouvez ré-indenter avec la =commande. Pour ré-indenter le contenu entier du tampon, utilisez ces commandes:

gg
=G

Cela vous amène au sommet, puis réintroduit tout en bas.

boshvark
la source
-1: Remplacer un onglet par un nombre fixe d'espaces n'est presque jamais utile. Cela changera l'apparence de toute ligne contenant un onglet précédé d'un non-onglet.
Kevin Cline du