Comment changer la taille de l'onglet dans Vim?

172

Chaque fois que j'ajoute un sélecteur en CSS et que j'appuie Enterpour définir les propriétés, cela se termine comme ceci:

#selector {
        property: value;
}

(Onglets de 8 espaces)

Comment puis-je configurer Vim pour qu'il ressemble à ceci:

#selector {
    property: value;
}

(Onglets à 4 espaces)

Alexchenco
la source
4
Voulez-vous un onglet de 4 espaces de largeur? Quatre espaces? Ou quatre onglets de 1 largeur d'espace? Ce sont des choses différentes et vous n'êtes pas clair. Dans tous les cas, commencez par lire: he ts,: he sw, and: he expandt
abeyer

Réponses:

103

Développant la réponse de Zoul:

Si vous souhaitez configurer Vim pour utiliser des paramètres spécifiques lors de la modification d'un type de fichier particulier, vous souhaiterez utiliser des autocommandes:

autocmd Filetype css setlocal tabstop=4

Cela fera en sorte que les onglets soient affichés sous forme de 4 espaces. Le paramétrage expandtabfera en sorte que Vim insère réellement des espaces (le nombre d'entre eux étant contrôlé par tabstop) lorsque vous appuyez sur tabulation; vous voudrez peut-être utiliser softtabstoppour faire fonctionner correctement le retour arrière (c'est-à-dire réduire l'indentation lorsque c'est ce qui se passerait si des tabulations étaient utilisées, plutôt que de toujours supprimer un caractère à la fois).

Pour prendre une décision pleinement éclairée quant à la façon de définir les choses, vous aurez besoin de lire docs sur Vim tabstop, shiftwidth, softtabstopet expandtab. Le bit le plus intéressant se trouve sous expandtab( :help 'expandtab):

Il existe quatre façons principales d'utiliser les onglets dans Vim:

  1. Gardez toujours «tabstop» à 8, définissez «softtabstop» et «shiftwidth» sur 4 (ou 3 ou ce que vous préférez) et utilisez «noexpandtab». Ensuite, Vim utilisera un mélange d'onglets et d'espaces, mais en tapant et se comportera comme un onglet apparaît tous les 4 (ou 3) caractères.

  2. Réglez «tabstop» et «shiftwidth» sur ce que vous préférez et utilisez «expandtab». De cette façon, vous insérerez toujours des espaces. Le formatage ne sera jamais perturbé lorsque «tabstop» est modifié.

  3. Réglez 'tabstop' et 'shiftwidth' sur ce que vous préférez et utilisez un | modeline | pour définir ces valeurs lors de la nouvelle édition du fichier. Ne fonctionne que lorsque vous utilisez Vim pour éditer le fichier.

  4. Définissez toujours «tabstop» et «shiftwidth» sur la même valeur et «noexpandtab». Cela devrait alors fonctionner (pour les retraits initiaux uniquement) pour tout paramètre tabstop utilisé par les utilisateurs. Cela pourrait être bien d'avoir des tabulations après le premier non-vide insérées comme des espaces si vous faites cela cependant. Sinon, les commentaires alignés seront erronés lorsque «tabstop» est modifié.

Michał Marczyk
la source
Aussi, ne vous inquiétez pas trop pour éventuellement changer d'avis plus tard ... voir :help retab(vérifiez la variante!).
Michał Marczyk
Est-ce que l'utilisation d'autocmd est complémentaire de l'utilisation de .vimrc, ou une alternative?
Josh Desmond
225
:set tabstop=4
:set shiftwidth=4
:set expandtab

Cela insérera 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 d'espaces apparaîtra de la même manière dans le navigateur et dans toute autre application.

zoul
la source
83
Oui, mais les tabulations sont sémantiques (chaque tabulation signifie 1 couche d'indentation), tandis que les espaces sont purement de présentation. Ou en d'autres termes, l'utilisation d'onglets permettra aux autres personnes qui consultent votre code d'afficher la largeur avec laquelle elles sont à l'aise, alors que les espaces ne le permettent pas.
K Prime
11
Notez que si vous préférez '>' et '<' déplacer votre texte de la même distance que la touche de tabulation , vous pouvez simplement :set shiftwidth=0dans votre vimrc et l'oublier pour toujours, car cela indique à vim que vous voulez toujours qu'il corresponde tabstop.
SeldomNeedy
133

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

:set tabstop=4

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

set tabstop=4

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

autocmd Filetype css setlocal tabstop=4

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

Keith
la source
2
si vous voulez que tab fonctionne comme quatre espaces, il est également nécessaire d'ajouter les autres lignes de la réponse @Zoul au .vimrc; c'est-à-dire, ajoutez «set shiftwidth = 4» et «set expandtab» au .vimrc également.
qartal
7
La question est "Comment changer la taille de l'onglet dans Vim?"
Keith
Voilà comment je le ferais. Et pour m'assurer qu'il ~/.vimrcest toujours sauvegardé, ln -s /home/myfolder/Dropbox/.vimrc ~
j'enregistre
41

Plusieurs des réponses sur cette page sont des solutions «à usage unique» au problème décrit. Cela signifie que la prochaine fois que vous ouvrirez un document avec vim, les paramètres de l'onglet précédent reviendront.

Si quelqu'un souhaite modifier définitivement les paramètres de l'onglet:

  • trouver / ouvrir votre .vimrc - instructions ici
  • ajoutez les lignes suivantes: ( plus d'infos ici )

     set tabstop=4
     set shiftwidth=4
     set expandtab
    
  • puis enregistrez le fichier et testez

Alexander McNulty
la source
11
Cela insère des espaces, pas des tabulations.
Supernovah
5
@Supernovah vous pouvez supprimer le "expandtab", pour obtenir des onglets
kommradHomer
29

En tant que one-liner dans vim :

:set tabstop=4 shiftwidth=4 expandtab

Pour une configuration permanente , ajoutez ces lignes à ~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab
oz19
la source
6

METTRE À JOUR

Si vous travaillez dans un projet particulier, je vous recommande vivement d'utiliser editorconfig .

Il vous permet de définir un .editorconfigfichier à la racine de votre référentiel définissant l'indentation que vous souhaitez utiliser pour chaque type de fichier dans votre référentiel.

Par exemple:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

Il existe un plugin vim qui configure automatiquement vim en fonction du fichier de configuration du fichier que vous ouvrez.

En plus de cela, le .editorconfigfichier est automatiquement pris en charge sur de nombreux autres IDE et éditeurs, c'est donc la meilleure option pour collaborer entre des utilisateurs avec des environnements différents.

RÉPONSE ORIGINALE

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

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

Ceci mappe deux ensembles différents de tailles aux clés \ t et \ m. Vous pouvez relier ceci aux clés de votre choix.

Jens
la source