Question

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 est insérée (j'ai essayé d'utiliser la touche h pour compter les espaces par la suite).

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

Était-ce utile?

La solution

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 belle RE globale pour les remplacer par des doubles espaces.

Autres conseils

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

:retab

Cela fonctionnera sur le tampon actuel.

Essayez

set expandtab

pour les onglets programmables.

Pour corriger les onglets préexistants:

:%s/\t/  /g

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

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

puis

:retab

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

:set nolist

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

Ajoutez les lignes suivantes à votre fichier .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é.

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

   set softtabstop=2 tabstop=8 shiftwidth=2

Cela vous donnera deux espaces par <TAB> appui, mais les <=> réels dans votre code seront toujours vus comme 8 caractères.

commencez par rechercher les onglets de votre fichier: / ^ I : set expandtab : retab

fonctionnera.

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

:!% expand -t8

Cela a fonctionné pour moi:

:set tabstop=2 shiftwidth=2 expandtab | retab

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

  

Ces commandes sont fournies:

     

Espace2Tab : convertissez les espaces en onglets, uniquement en retrait.

     

Tab2Space Convertissez 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é à rechercher une solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top