web-dev-qa-db-fra.com

Remplacer les onglets 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 par la suite).

Je ne sais pas quoi faire pour que gVim convertisse les onglets en espaces?

332
David.Chu.ca

IIRC, quelque chose comme:

set tabstop=2 shiftwidth=2 expandtab

devrait faire l'affaire. Si vous avez déjà des onglets, effectuez un suivi avec une ER globale Nice pour les remplacer par des espaces doubles.

358
D.Shawley

Une fois que vous avez développé la boîte de dialogue comme indiqué dans les autres réponses, le moyen extrêmement pratique de convertir les fichiers existants en fonction de vos nouveaux paramètres est:

:retab

Cela fonctionnera sur le tampon actuel.

787
ʞɔıu

Essayer

set expandtab

pour les onglets mous.

Pour corriger les onglets préexistants:

:%s/\t/  /g

J'ai utilisé deux espaces puisque vous avez déjà défini votre tabstop à 2 espaces.

103
Hank Gay

Cela a fonctionné pour moi:

vous pouvez voir les onglets en commençant par ceci:

:set list

puis pour permettre de remplacer les onglets, procédez comme suit:

:set expandtab

ensuite

:retab

maintenant tous les onglets ont été remplacés par des espaces, vous pouvez alors revenir à l'affichage normal comme ceci:

:set nolist
54
serup

gg=G réindente le fichier entier et supprime la plupart, sinon tous les onglets que j’obtiens dans les fichiers de collègues.

41
Jake Sellers

Ajouter les lignes suivantes à votre .vimrc

set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>

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

39
anish

Si vous souhaitez que votre \t soit égal à 8 espaces, envisagez de définir:

   set softtabstop=2 tabstop=8 shiftwidth=2

Cela vous donnera deux espaces par <TAB> appuyé, mais le \t actuel dans votre code sera toujours vu avec 8 caractères.

14
pk.

première recherche d'onglets dans votre fichier:/^ I: set expandtab: retab

marchera.

4
Shekar

expand est un utilitaire Unix permettant de convertir des tabulations en espaces. Si vous ne voulez pas utiliser set dans vim, vous pouvez utiliser une commande Shell de vim:

:!% expand -t8
3
qwr

Cela a fonctionné pour moi:

:set tabstop=2 shiftwidth=2 expandtab | retab
3
Willem van Ketwich

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

Ces commandes sont fournies:

Space2Tab Convertit les espaces en onglets, uniquement en retrait.

Tab2Space Convertit les onglets en espaces, uniquement en retrait.

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

Chaque commande accepte un argument spécifiant le nombre d'espaces dans une colonne à onglets. 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 = string 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(<line1>,<line2>,0,<q-args>)
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)

Cela m'a aidé un peu plus que les réponses fournies lorsque j'ai commencé à chercher une solution.

2
Adam Eberlin