Remplacez l’onglet par des espaces dans Vim

Je voudrais convertir l’onglet en espaces dans gVim. J’ai ajouté la ligne suivante à mon _vimrc :

 set tabstop=2 

Cela fonctionne pour s’arrêter à deux espaces mais il semble toujours qu’une touche de tabulation soit insérée (j’ai essayé d’utiliser la touche h pour compter les espaces après).

Je ne suis pas sûr de savoir comment faire pour que gVim convertisse les tabs en espaces.

IIRC, quelque chose comme:

 set tabstop=2 shiftwidth=2 expandtab 

devrait faire le tour. Si vous avez déjà des tabs, suivez-le avec une belle RE globale pour les remplacer par des espaces doubles.

Une fois que vous avez activé expandtab selon les autres réponses, la manière extrêmement pratique de convertir les fichiers existants en fonction de vos nouveaux parameters est la suivante:

 :retab 

Cela fonctionnera sur le tampon actuel.

Essayer

 set expandtab 

pour les tabs souples.

Pour corriger les tabs préexistants:

 :%s/\t/ /g 

J’ai utilisé deux espaces car vous définissez déjà votre tabstop sur 2 espaces.

Cela a fonctionné pour moi:

vous pouvez voir les tabs en faisant d’abord ceci:

 :set list 

alors pour permettre de remplacer les tabulations alors faites ceci:

 :set expandtab 

puis

 :retab 

maintenant tous les tabs ont été remplacés par des espaces que vous pouvez ensuite retourner à l’affichage normal comme ceci:

 :set nolist 

Ajoutez les lignes suivantes à votre fichier .vimrc

 set expandtab set tabstop=4 set shiftwidth=4 map  :retab  :wq!  

Ouvrez un fichier dans vim et appuyez sur F2 Les tabs seront convertis en 4 espaces et le fichier sera automatiquement enregistré.

gg=G récupérera l’intégralité du fichier et supprimera la plupart, sinon tous les tabs que je reçois des fichiers des collègues.

Si vous voulez garder votre \t égal à 8 espaces, alors considérez le réglage:

  set softtabstop=2 tabstop=8 shiftwidth=2 

Cela vous donnera deux espaces par appuyez sur, mais \t réel dans votre code sera toujours considéré comme 8 caractères.

première recherche d’tabs dans votre fichier: / ^ I: set expandtab: retab

marchera.

Cet article contient un excellent script vimrc pour la gestion des tabs et des espaces et la conversion entre eux.

Ces commandes sont fournies:

Space2Tab Convertissez des espaces en tabulations, uniquement en retrait.

Tab2Space Convertit les tabs en espaces, uniquement en retrait.

RetabIndent Exécutez Space2Tab (si ‘expandtab’ est défini) ou Tab2Space (sinon).

Chaque commande accepte un argument qui spécifie le nombre d’espaces dans une colonne d’onglet. Par défaut, le paramètre “tabstop” est utilisé.

Source: http://vim.wikia.com/wiki/Super_retab#Script

 " Return indent (all whitespace at start of a line), converted from " tabs to spaces if what = 1, or from spaces to tabs otherwise. " When converting to tabs, result has no redundant spaces. function! Indenting(indent, what, cols) let spccol = repeat(' ', a:cols) let result = substitute(a:indent, spccol, '\t', 'g') let result = substitute(result, ' \+\ze\t', '', 'g') if a:what == 1 let result = substitute(result, '\t', spccol, 'g') endif return result endfunction " Convert whitespace used for indenting (before first non-whitespace). " what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces). " cols = ssortingng with number of columns per tab, or empty to use 'tabstop'. " The cursor position is restored, but the cursor will be in a different " column when the number of characters in the indent of the line is changed. function! IndentConvert(line1, line2, what, cols) let savepos = getpos('.') let cols = empty(a:cols) ? &tabstop : a:cols execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e' call histdel('search', -1) call setpos('.', savepos) endfunction command! -nargs=? -range=% Space2Tab call IndentConvert(,,0,) command! -nargs=? -range=% Tab2Space call IndentConvert(,,1,) command! -nargs=? -range=% RetabIndent call IndentConvert(,,&et,) 

Cela m’a aidé un peu plus que les réponses apscopes lors de ma première recherche de solution.

expand est un utilitaire Unix permettant de convertir des tabs en espaces. Si vous ne voulez rien set dans vim, vous pouvez utiliser une commande shell à partir de vim:

 :!% expand -t8