Modification du comportement de l’indentation Vim par type de fichier

Quelqu’un pourrait-il m’expliquer en termes simples le moyen le plus simple de modifier le comportement d’indentation de Vim en fonction du type de fichier? Par exemple, si j’ouvre un fichier Python, il doit comporter 2 espaces, mais si j’ouvre un script Powershell, il doit utiliser 4 espaces.

Vous pouvez append des fichiers .vim à exécuter chaque fois que vim passe à un .vim fichier particulier.

Par exemple, j’ai un fichier ~/.vim/after/ftplugin/html.vim avec ce contenu:

 setlocal shiftwidth=2 setlocal tabstop=2 

Ce qui fait que vim utilise des tabs d’une largeur de 2 caractères pour l’indentation (l’option noexpandtab est définie globalement ailleurs dans ma configuration).

Ceci est décrit ici: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#5.4 , faites défiler jusqu’à la section sur les plugins de type de fichier.

Utilisez ftplugins ou autocommandes pour définir les options. (: h ftplugin pour plus d’informations)

Dans ~ / .vim / ftplugin / python.vim:

 setlocal sw=2 sts=2 et 

Et n’oubliez pas de les activer dans ~ / .vimrc

 filetype plugin indent on 

Ou dans ~ / .vimrc

 au FileType python setl sw=2 sts=2 et 

Je suggère également d’apprendre la différence entre «ts» et «sts». Beaucoup de gens ne connaissent pas les «sts».

éditez votre ~/.vimrc , et ajoutez différents types de fichiers pour différentes indentations, par exemple, je veux un indentation html/rb pour 2 espaces et js/coffee fichiers js/coffee indent pour 4 espaces:

 " by default, the indent is 2 spaces. set shiftwidth=2 set softtabstop=2 set tabstop=2 " for html/rb files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab autocmd Filetype ruby setlocal ts=2 sw=2 expandtab " for js/coffee/jade files, 4 spaces autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab 

reportez-vous à: Définition des préférences d’espaces blancs de Vim par type de fichier

Mettez les commandes autocmd basées sur le suffixe de fichier dans votre ~ / .vimrc

 autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on 

Les commandes que vous recherchez sont probablement ts = et sw =

Je travaille habituellement avec expandtab , mais c’est mauvais pour les makefiles. J’ai récemment ajouté:

 :autocmd FileType make set noexpandtab 

à la fin de mon fichier .vimrc et il reconnaît Makefile, makefile et * .mk comme makefiles et ne développe pas les tabs. Vous pouvez probablement étendre cela.

Je suis toujours surpris par les personnes qui changent la taille des tabs pour différents types de fichiers. Que faites-vous quand vous regardez un fichier en utilisant moins?

Personnellement, j’utilise ces parameters dans .vimrc:

 autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

Cela peut être connu de la plupart d’entre nous, mais de toute façon (j’ai été insortinggué pour la première fois): Faire :set et ( :set expandtabs) ne change pas les tabs existants dans le fichier, il faut le faire :retab . Par exemple:

 :set et :retab 

et les tabs du fichier sont remplacés par suffisamment d’espaces. Pour avoir des tabs simplement faire:

 :set noet :retab 

Bien que vous puissiez configurer l’indentation de Vim à l’aide du plug-in indent ou en utilisant manuellement les parameters, je vous recommande d’utiliser un script python appelé Vindect qui définit automatiquement les parameters appropriés lorsque vous ouvrez un fichier python. Utilisez cette astuce pour rendre l’utilisation de Vindect encore plus efficace. Lorsque j’ai commencé à éditer des fichiers python créés par d’autres utilisateurs avec différents styles d’indentation (tabulation vs espace et nombre d’espaces), c’était incroyablement frustrant. Mais Vindect avec ce fichier d’indentation

Recommande également:

  • pythonhelper
  • python_match
  • python_ifold

Aujourd’hui, vous pouvez essayer editorconfig , il y a aussi un plugin vim pour cela. Grâce à cela, vous pouvez non seulement modifier la taille de l’indentation dans vim, mais dans de nombreux autres éditeurs, conserver des styles de codage cohérents.

Ci-dessous se trouve un simple editorconfig, comme vous pouvez le voir, les fichiers python auront 4 espaces pour l’indentation et les fichiers gabarits pug auront seulement 2.

 # 4 space indentation for python files [*.py] indent_style = space indent_size = 4 # 2 space indentation for pug templates [*.pug] indent_size = 2 

J’utilise un utilitaire que j’ai écrit en C appelé autotab . Il parsing les premières milliers de lignes d’un fichier que vous chargez et détermine les valeurs des parameters Vim shiftwidth , tabstop et expandtab .

Ceci est compilé en utilisant, par exemple, gcc -O autotab.c -o autotab . Les instructions pour l’intégration avec Vim se trouvent dans l’en-tête du commentaire en haut.

Autotab est assez intelligent, mais peut parfois être confondu, en particulier par les différents styles d’indentation.

Si un fichier utilise des tabulations, ou une combinaison d’tabs et d’espaces, pour l’indentation, Autotab déterminera la taille d’onglet utilisée en tenant compte de facteurs tels que l’alignement des éléments internes entre les lignes successives, tels que les commentaires.

Il fonctionne pour une variété de langages de programmation, et pardonne les éléments “hors bande” qui n’obéissent pas aux incréments d’indentation, tels que les directives de prétraitement C, les étiquettes C, sans parler des lignes vides évidentes.