Définition des préférences d'espace blanc Vim par type de fichier

155

À mon travail, je suis tenu de suivre le style de la maison pour l'indentation, qui va comme suit:

  • 2 espaces lors du codage html et ruby
  • onglets lors du codage javascript, avec tabwidth = 4 recommandé

Quelle est la meilleure façon de spécifier différentes préférences d'espaces par type de fichier?

Nelstrom
la source
Toutes ces réponses m'ont rendu encore plus confus. Le problème est que les options dépendent des préférences. La réponse acceptée a cependant une belle syntaxe. C'était un excellent guide: vimcasts.org/transcripts/2/en
Mikael Lindlöf

Réponses:

245

il existe de nombreuses façons, mais voici une méthode simple et facile à comprendre. ajoutez ces lignes à votre ~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4
Peter
la source
27
ts = 'nombre d'espaces que <Tab> dans le fichier utilise' sts = 'nombre d'espaces que <Tab> utilise lors de l'édition' sw = 'nombre d'espaces à utiliser pour l'étape de retrait (automatique)' pour plus de détails, voir: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs
J'avais besoin d'ajouter expandtab au moins pour ruby, voir la réponse par «trop de php» ici
Michael Durrant
87

La réponse de Peter est assez simple, mais malheureusement, les options ne sont pas bonnes. Vous devez utiliser les options suivantes à la place:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

Notez également:

  • Vous pouvez faire en sorte que vim affiche des caractères d'onglet en utilisant :set list.
  • Une fois que vous avez correctement défini les options de tabulation / espace, vous pouvez faire en sorte que vim répare le fichier (remplacez les espaces par des tabulations ou vice versa) à l'aide de la :retab!commande.
trop de php
la source
2
Quel est l'avantage de expandtabplussts=2
James McMahon
12
@JamesMcMahon expandtab développe tous les onglets en espaces. sts (softtabstop) insère des espaces et des tabulations pour les retraits: autant de tabulations que peut tenir dans le retrait en fonction de la taille de tabstop, puis d'espaces après cela. Bien sûr, si expandtab est activé, tous les onglets insérés sont convertis en espaces. stackoverflow.com/questions/1562336/… pourrait aider davantage. Sans développer l'onglet, la réponse de Peter insérerait des tabulations de 2 caractères de large, pas d'espaces.
ajmccluskey
35

+1 à la réponse de Peter, mais Vim fournit également une autre solution. Si vous voulez faire quelque chose de plus compliqué qu'une seule setlocal, comme configurer tout un tas d'options, de commandes et de mappages à la fois, alors la fonction de plugin de type de fichier de vim vient à la rescousse.

Vous devez avoir filetype plugin onou filetype plugin indent ondans votre .vimrc, puis créer un plugin pour par exemple ruby ​​que vous pouvez créer ~/.vim/ftplugin/ruby.vim. Techniquement , vous pouvez utiliser les commandes comme ici, pour être exécuté lorsqu'un fichier Ruby est chargé, mais celles recommandées comprennent setlocal, map <buffer>, command -bufferet la définition des fonctions. Beaucoup plus d'informations sont dans le Guide de l'utilisateur; si vous êtes assez familier avec les scripts vim, passez à :help 41.11, sinon lisez :help usr_40et :help usr_41.

Hobbs
la source
10

Il y a aussi un joli script vim: DetectIndent qui essaie de détecter l'indentation d'un fichier que vous ouvrez. C'est très pratique si vous travaillez avec de nombreux fichiers avec un style de codage différent.

J'utilise une autocommande dans mon .vimrc :

:autocmd BufReadPost * :DetectIndent 
Benedikt Waldvogel
la source
0

Pour insérer des espaces chaque fois que la touche de tabulation est enfoncée, définissez l'option 'expandtab':

:set expandtab

L'étape suivante consiste à contrôler le nombre de caractères d'espace qui seront insérés lorsque la touche de tabulation est enfoncée, définissez l'option «tabstop». Par exemple, pour insérer 2 espaces pour un onglet, utilisez:

:set tabstop=2

réf: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

Bartoindahouse
la source