Question

Comment empêcher vim de remplacer les espaces par des tabulations lorsque l'autoindent est activé?

Un exemple: si j'ai deux onglets et 7 espaces au début de la ligne et tabstop = 3 et que j'appuie sur Entrée, la ligne suivante comporte quatre onglets et 1 espace au début , mais je ne veux pas que ...

Était-ce utile?

La solution

C’est peut-être une bonne idée de ne pas utiliser d’onglet du tout.

:set expandtab

Si vous souhaitez remplacer tous les onglets de votre fichier par 3 espaces (ce qui ressemblera beaucoup à tabstop = 3 ):

:%s/^I/   /

(où ^ I est le caractère TAB )

À partir de l'aide en ligne de VIM:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.

Autres conseils

  

Tout ce que je veux, c’est que la ligne auto-identifiée ait exactement les mêmes caractères d’indentation que la ligne précédente.

: help copyindent

  

'copyindent' 'ci' boolean (désactivé par défaut); local à tampon; {absent de Vi}

     

Copiez la structure des lignes existantes avec retrait lors de l'indentation automatique d'un   nouvelle ligne. Normalement, le nouveau tiret est reconstruit par une série de   des tabulations suivies d'espaces si nécessaire (sauf si 'expandtab' est activé,   dans ce cas, seuls les espaces sont utilisés). Activer cette option rend le   nouvelle ligne copie quels que soient les caractères utilisés pour indenter sur le   ligne existante. Si le nouveau retrait est supérieur à celui existant   la ligne, l’espace restant est rempli de la manière habituelle.

     

REMARQUE: la 'copyindent' est réinitialisée lorsque 'compatible' est défini.
  Voir également 'preserveindent' .

: help preserveindent

  

'preserveindent' 'pi' boolean (désactivé par défaut); local à tampon; {absent de Vi}

     

Lorsque vous modifiez le retrait de la ligne actuelle, conservez autant de   structure de retrait que possible. Normalement, le retrait est remplacé par un   série d'onglets suivis d'espaces si nécessaire (sauf si 'expandtab' est   activé, auquel cas seuls des espaces sont utilisés). Activer cette option   signifie que le retrait préservera autant de caractères existants que possible   pour mettre en retrait et ajouter uniquement des tabulations ou des espaces supplémentaires selon les besoins.

     

REMARQUE: Lorsque vous utilisez " > > " plusieurs fois le retrait résultant est un mélange de   onglets et espaces. Vous pourriez ne pas aimer cela.
  REMARQUE: 'preserveindent' est réinitialisé lorsque 'compatible' est défini.
  Voir également 'copyindent' .
  Utilisez: retab pour nettoyer les espaces blancs.

Vous pouvez convertir tous les TAB en SPACE

.
:set et
:ret!

ou convertir tout SPACE en TAB

:set et!
:ret!

Voici une partie de mon .vimrc :

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Cela fonctionne bien pour moi car je ne veux absolument pas de tabulations dans mon code source. D'après votre question, il semble que vous souhaitiez conserver deux tabulations et sept espaces sur la ligne suivante, et je ne suis pas sûr qu'il y ait un moyen d'enseigner à vim de s'adapter à ce style.

Peut-être que le fond de ceci peut vous aider?

  

Standard vi interprète littéralement la touche de tabulation, mais il existe des alternatives populaires basées sur vi qui sont plus intelligentes, comme vim. Pour que vim interprète tab comme une commande «indent» au lieu d'une commande insert-a-tab, procédez comme suit:

set softtabstop=2

Si vous souhaitez remplacer tous les onglets par des espaces basés sur le paramètre "ts", vous pouvez utiliser: retab. Il peut aussi faire l'inverse.

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