GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je convertir des espaces en tabulations dans Vim ou Linux ?

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>

Linux
  1. Comment configurer Vim comme éditeur par défaut sous Linux

  2. Comment définir ou modifier le nom d'hôte du système sous Linux

  3. Comment configurer des jails chroot Linux

  4. Comment définir la variable $Path sous Linux

  5. Comment définir l'affinité processeur d'un processus sous Linux ?

Comment afficher les numéros de ligne dans Vim / Vi

Comment configurer la planification torrent sur Linux

Comment convertir par lots des fichiers PDF sous Linux

Comment définir ou modifier le nom d'hôte sous Linux

Comment convertir une page Web en PDF sous Linux

Convertir les onglets en espaces dans le terminal Linux avec la commande Expand