Comment changer la taille de l’onglet dans Vim?

Chaque fois que j’ajoute un sélecteur en CSS et que j’appuie sur Enter pour définir les propriétés, il se retrouve ainsi:

 #selector { property: value; } 

(Onglets à 8 espaces)

Comment puis-je configurer Vim pour le rendre ainsi:

 #selector { property: value; } 

(Onglets à 4 espaces)

Expansion sur la réponse de zoul:

Si vous souhaitez configurer Vim pour utiliser des parameters spécifiques lors de l’édition d’un type de fichier particulier, vous devez utiliser les autocommandes:

 autocmd Filetype css setlocal tabstop=4 

Cela fera en sorte que les tabs sont affichés sous forme de 4 espaces. expandtab , Vim insérera des espaces (le nombre d’entre eux étant contrôlé par tabstop ) lorsque vous appuyez sur la touche tabulation; Vous pouvez utiliser softtabstop pour que le retour en arrière fonctionne correctement ( softtabstop à-d. réduire l’indentation lorsque cela se produirait si les tabs étaient utilisés, plutôt que de toujours supprimer un caractère à la fois).

Pour prendre une décision shiftwidth sur la façon de configurer les choses, vous devez lire les documents Vim sur tabstop , shiftwidth , softtabstop et expandtab . Le bit le plus intéressant se trouve sous expandtab ( :help 'expandtab ):

Il existe quatre méthodes principales pour utiliser les tabs dans Vim:

  1. Toujours garder ‘tabstop’ à 8, définir ‘softtabstop’ et ‘shiftwidth’ à 4 (ou 3 ou tout ce que vous préférez) et utiliser ‘noexpandtab’. Ensuite, Vim utilisera un mélange d’tabs et d’espaces, mais en tapant et se comportera comme un onglet apparaît tous les 4 (ou 3) caractères.

  2. Définissez “tabstop” et “shiftwidth” à ce que vous préférez et utilisez “expandtab”. De cette façon, vous insérerez toujours des espaces. Le formatage ne sera jamais gâché lorsque «tabstop» est modifié.

  3. Réglez ‘tabstop’ et ‘shiftwidth’ à ce que vous préférez et utilisez | modeline | pour définir ces valeurs lors de la modification du fichier à nouveau. Ne fonctionne que lorsque vous utilisez Vim pour modifier le fichier.

  4. Toujours définir ‘tabstop’ et ‘shiftwidth’ à la même valeur et ‘noexpandtab’. Cela devrait alors fonctionner (pour les indentations initiales uniquement) pour tout paramètre de tabulation utilisé par les utilisateurs. Si vous faites cela, il peut être intéressant d’avoir des tabs après le premier élément inséré en blanc. Dans le cas contraire, les commentaires alignés seront erronés lorsque «tabstop» est modifié.

 :set tabstop=4 :set shiftwidth=4 :set expandtab 

Cela va insérer quatre espaces au lieu d’un caractère de tabulation. Les espaces sont un peu plus «stables», ce qui signifie que le texte en retrait avec des espaces apparaîtra de la même manière dans le navigateur et dans toute autre application.

Pour effectuer la modification pour une session, utilisez cette commande:

 :set tabstop=4 

Pour rendre la modification permanente, ajoutez-la à ~/.vimrc ou ~/.vim/vimrc :

 set tabstop=4 

Cela affectera tous les fichiers, pas seulement css. Pour n’affecter que les fichiers CSS:

 autocmd Filetype css setlocal tabstop=4 

comme indiqué dans la réponse de Michał .

Plusieurs des réponses sur cette page sont des corrections «à usage unique» du problème décrit. Ce qui signifie que la prochaine fois que vous ouvrez un document avec vim, les parameters de l’onglet précédent seront de retour.

Si quelqu’un est intéressé par la modification permanente des parameters de l’onglet:

  • trouver / ouvrir votre fichier .vimrc – instructions ici
  • ajoutez les lignes suivantes: ( plus d’infos ici )

      set tabstop=4 set shiftwidth=4 set expandtab 
  • puis enregistrer le fichier et tester

Si vous devez souvent changer de taille et que vous ne voulez pas lier cela à un type de fichier spécifique, vous pouvez avoir des commandes prédéfinies sur votre fichier .vimrc pour changer rapidement les préférences:

 nmap t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nmap m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2 

Cela mappe deux ensembles de tailles différents aux clés \ t et \ m. Vous pouvez le relier à n’importe quelle touche.