Est-il possible de convertir des tabulations en espaces tout en maintenant l'alignement du texte?
Simplement remplacer ne fonctionne que utilement quand il n'y a pas de personnages principaux.
indentation
tab-characters
idéesman42
la source
la source
:h vim-faq
et effectuer une recherche/tab characters
. Le tag difficile à mémoriser est:h faq-14.16
.Réponses:
Vous pouvez utiliser la
:retab
commande. De:help :retab
Notez que la commande accepte une plage, vous pouvez donc effectuer une sélection visuelle et uniquement
:retab
les lignes sélectionnées.la source
Vous pouvez utiliser
:retab
, comme indiqué, cependant, cela changera tous les onglets en espaces, et pas seulement les onglets au début de la ligne.Donc ceci (où
⇥
est un caractère de tabulation):se change en (où
␣
est un espace):Cela peut produire des effets secondaires inattendus dans certains scénarios, et c'est encore plus un problème lorsque vous modifiez des espaces en onglets!
J'ai donc écrit une petite fonction pour ne changer que les tabulations / espaces au début de la ligne:
Avec cette version, vous devez spécifier manuellement
expandtab
dans l'appel de fonction (c'est-:call Retab(1)
à- dire pour changer les tabulations en espaces), mais vous pouvez également le modifier pour qu'il prenne la valeur actuelle de&expandtab
(comme il le fait déjà avec&tabstop
) comme:retab
tout le monde. (Je préfère préférer le spécifier manuellement).la source
a
enif a:expandtab
moyenne?set expandtab
dans votre fichier .vimrc, puisautocmd BufWritePre * :call Retab(&expandtab)
- l'indentation sera modifiée en onglets, au lieu d'espaces.Vim fournit une
!retab
commande qui remplacera toutes les séquences de<Tab>
nouvelles chaînes par des espaces en utilisant la nouvelle valeur de tabstop (par exemple:set tabstop=2
) donnée, mais tous les onglets à l'intérieur des chaînes peuvent être modifiés (par exemple, dans un programme C, vous devez utiliser\t
pour éviter cela)!Donc, vous pouvez également changer tous les onglets en espaces en utilisant la commande suivante:
ou comme suggéré par @Shahbaz :
Ainsi, seuls les onglets utilisés dans l'indentation sont convertis.
Explication:
%
représente l'intégralité du tampon / fichier (:help :%
)s
signifie substitute (:help sub-replace-special
)\t
, ou^I
représente un onglet- utilisez autant d'espaces que nécessaire par onglet
g
- signifie global et convertira plusieurs occurrences d'onglets dans la même ligneEnsuite , pour corriger indentation du fichier entier, vous pouvez essayer: gg=G. Vérifiez: Réindentez le code mal mis en retrait pour plus de détails.
Pour utiliser des espaces par défaut au lieu d'onglets, vous devez ajouter les paramètres suivants dans votre
.vimrc
fichier:La solution alternative consiste à utiliser
tidy
Apparenté, relié, connexe:
la source
%s/^\t\+/ g
sorte que seuls les onglets utilisés dans l'indentation soient convertis. En outre,gg=G
pourrait être catastrophique avec des langages comme Python.Essayez d'utiliser:
expand
est un outil de ligne de commande permettant de convertir des tabulations en espaces que vous pouvez exécuter à partir d'un shell ou avec:!expand
.Il est dans POSIX , il devrait donc être disponible sur la plupart des systèmes.
unexpand
va faire l'inverse, au fait.la source
expand
?:%!expand -t 4
intérieur de vim. Mieux encore, vous pouvez également utiliser l'option de largeur de décalage actuelle::exe '%!expand -t ' . &shiftwidth
Par souci d'exhaustivité, vous
=
pouvez également utiliser cette option après avoir spécifié que les tabulations sont remplacées par des espaces. En mode normal, vous pouvez le faire en tapant:set expandtab
. Ensuite,=
pourrait être utilisé de deux manières:=
corrige les indentations des blocs de code sélectionnés.gg=G
corrige le fichier entier,gg
déplace le curseur au début du fichier,=
est ensuite appliqué etG
déplace le curseur à la fin du fichier.Référence: lien
la source