1 - Si vous avez des espaces et que vous voulez des tabulations.
Tout d'abord, vous devez décider combien d'espaces auront un seul onglet. Cela dit, supposons que vous ayez des lignes avec 4 espaces ou 8 en tête... Vous vous rendez compte que vous voulez probablement qu'un onglet soit composé de 4 espaces. Maintenant, avec ces informations, vous faites :
:set ts=4
:set noet
:%retab!
Il y a un problème ici! Cette séquence de commandes recherchera tout votre texte, pas seulement les espaces en début de ligne. Cela signifie une chaîne comme :"Hey,␣this␣␣␣␣is␣4␣spaces"
deviendra "Hey,␣this⇥is␣4␣spaces"
, mais ce n'est pas! c'est un onglet !
Pour régler ce petit problème je recommande un search
, au lieu de retab
.
:%s/^\(^I*\)␣␣␣␣/\1^I/g
Cette recherche recherchera dans l'ensemble du fichier toutes les lignes commençant par le nombre d'onglets, suivi de 4 espaces, et les remplacera par le nombre d'onglets trouvés plus un.
Ceci, malheureusement, ne fonctionnera pas immédiatement !
Au début, le fichier aura des lignes commençant par des espaces. La recherche ne convertira alors que les 4 premiers espaces en tabulation, et laissera les suivants...
Vous devez répéter la commande. Combien de fois? Jusqu'à ce que vous obteniez un pattern not found
. Je ne peux pas encore penser à un moyen d'automatiser le processus. Mais si vous le faites :
`[email protected]:`
Vous avez probablement terminé. Cette commande répète la dernière recherche/remplacement 10 fois. Il est peu probable que votre programme ait autant de retraits. Si c'est le cas, répétez simplement @@
.
Maintenant, juste pour compléter la réponse. Je sais que vous avez demandé le contraire, mais vous ne savez jamais quand vous devez annuler les choses.
2 - Vous avez des tabulations et vous voulez des espaces.
Tout d'abord, décidez du nombre d'espaces dans lesquels vous souhaitez que vos onglets soient convertis. Disons que vous voulez que chaque onglet soit composé de 2 espaces. Vous faites alors :
:set ts=2
:set et
:%retab!
Cela aurait le même problème avec les chaînes. Mais comme son meilleur style de programmation consiste à ne pas utiliser de tabulations dures à l'intérieur des chaînes, vous faites en fait une bonne chose ici. Si vous avez vraiment besoin d'une tabulation dans une chaîne, utilisez \t
.
Utiliser Vim pour développer tous les leaders espaces (plus larges que 'tabstop'
), vous aviez raison d'utiliser retab
mais assurez-vous d'abord 'expandtab'
est réinitialisé (:verbose set ts? et?
est votre ami). retab
prend une gamme , donc je spécifie généralement %
pour signifier "l'ensemble du fichier".
:set tabstop=2 " To match the sample file
:set noexpandtab " Use tabs, not spaces
:%retab! " Retabulate the whole file
Avant de faire quelque chose comme ça (en particulier avec les fichiers Python !), je mets généralement 'list'
, pour que je puisse voir l'espace blanc et le changement.
J'ai le mappage suivant dans mon .vimrc
pour cela :
nnoremap <F2> :<C-U>setlocal lcs=tab:>-,trail:-,eol:$ list! list? <CR>