51 votes

Tabulations et espaces dans vim

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

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

57voto

user11211 Points 763

Il est peut-être judicieux de ne pas utiliser d'onglets du tout.

:set expandtab

Si vous voulez remplacer toutes les tabulations de votre fichier par 3 espaces (ce qui ressemblera assez bien à tabstop=3 ) :

:%s/^I/   /

(où ^I es el TAB caractère)

Dans 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.

29voto

Aristotle Pagaltzis Points 43253

tout ce que je veux, c'est que la ligne à indentation automatique 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 au tampon ; {pas dans Vi}

Copie la structure de l'indentation des lignes existantes lors de l'indentation automatique d'une nouvelle ligne. Normalement, la nouvelle indentation est reconstruite par une série de tabulations suivies d'espaces selon les besoins (sauf si Expansion de l'onglet est activé, dans ce cas, seuls les espaces sont utilisés). En activant cette option, la ligne copie les caractères utilisés pour l'indentation sur la ligne existante. ligne existante. Si la nouvelle indentation est supérieure à celle de la ligne existante, l'espace restant est rempli de manière normale. ligne existante, l'espace restant est rempli de la manière normale.

NOTE : copyindent est remis à zéro lorsque compatible est réglé.
Voir aussi préserver l'indentation .

:help preserveindent

préserver l'indentation "pi boolean (désactivé par défaut) ; local au tampon ; {pas dans Vi}

Lorsque l'on modifie l'indentation de la ligne courante, il faut préserver autant que possible la structure d'indentation que possible. Normalement, l'indentation est remplacée par une série de tabulations suivies d'espaces selon les besoins (sauf si Expansion de l'onglet est activé, auquel cas seuls les espaces sont utilisés). L'activation de cette option signifie que l'indentation conservera autant de caractères existants que possible pour l'indentation, et n'ajoutera des tabulations ou des espaces supplémentaires que si nécessaire.

NOTE : Lorsque vous utilisez ">>" plusieurs fois, l'indentation résultante est un mélange de de tabulations et d'espaces. Vous n'aimerez peut-être pas cela.
NOTE : préserver l'indentation est remis à zéro lorsque compatible est réglé.
Voir aussi copyindent .
Utilisez :retab pour nettoyer les espaces blancs.

23voto

kev Points 41855

Vous pouvez convertir tous les TAB a SPACE

:set et
:ret!

ou convertir tous les SPACE a TAB

:set et!
:ret!

17voto

Greg Hewgill Points 356191

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 d'onglets dans mon code source. D'après votre question, il semble que vous vouliez garder deux tabulations et sept espaces sur la ligne suivante, et je ne suis pas sûr qu'il y ait un moyen d'apprendre à vim à s'adapter à ce style.

1voto

svrist Points 3408

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

Le vi standard interprète la touche tabulation littéralement, mais il existe des alternatives populaires dérivées de vi qui sont plus intelligentes, comme vim. Pour que vim interprète la touche tab comme une commande "indent" au lieu d'une commande d'insertion de tabulation, procédez comme suit :

set softtabstop=2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X