web-dev-qa-db-fra.com

Changer le comportement d'indentation de 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 être indenté de 2 espaces, mais si j'ouvre un script Powershell, il doit utiliser 4 espaces.

358
EBGreen

Vous pouvez ajouter des fichiers .vim à exécuter chaque fois que vim bascule vers un type de 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 tabulations 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#05.4 , faites défiler jusqu'à la section sur les plugins de type de fichier.

288
SpoonMeiser

Utilisez les ftplugins ou les autocommandes pour définir les options.

ftplugin

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

setlocal shiftwidth=2 softtabstop=2 expandtab

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

filetype plugin indent on

(:h ftplugin pour plus d'informations)

autocommande

Dans ~/.vimrc:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

Vous pouvez remplacer les commandes ou paramètres longs par leurs versions abrégées:
autocmd : au
setlocal : setl
shiftwidth : sw
tabstop : ts
softtabstop : sts
expandtab : et

Je suggérerais également d'apprendre la différence entre tabstop et softtabstop. Beaucoup de gens ne connaissent pas softtabstop.

163
graywh

éditez votre ~/.vimrc, et ajoutez différents types de fichiers pour différents retraits, par exemple. Je veux html/rb indent pour 2 espaces et js/coffee fichiers 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

se référer à: Définition des préférences d'espaces Vim par type de fichier

77

Placez les commandes autocmd en fonction du suffixe du 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 =

58
Paul Tomblin

Je travaille habituellement avec expandtab set, 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 en tant que makefiles et ne développe pas les onglets. Vraisemblablement, vous pouvez prolonger cela.

23
Jonathan Leffler

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

Personnellement, j'utilise ces paramètres dans .vimrc:

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType Ruby set tabstop=8|set shiftwidth=2|set expandtab
14
Nello

La plupart d’entre nous le savent, mais de toute façon (j’étais perplexe la première fois): Faire :set et (:set expandtabs) ne modifie pas les onglets existants dans le fichier, il faut le faire :retab. Par exemple:

:set et
:retab

et les onglets du fichier sont remplacés par suffisamment d’espaces. Pour avoir des onglets en arrière, faites simplement:

:set noet
:retab
6
Juan Lanus

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

Vous trouverez ci-dessous un simple éditeur de configuration. Comme vous pouvez le constater, les fichiers python auront 4 espaces pour l'indentation et les fichiers de gabarit pug n'en auront que 2.

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

# 2 space indentation for pug templates
[*.pug]
indent_size = 2
4
chengbo

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

Recommande également:

3
haridsv

J'utilise un utilitaire que j'ai écrit en C appelé autotab . Il analyse les quelques milliers de premières lignes d'un fichier que vous chargez et détermine les valeurs des paramètres 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 sont dans l'en-tête de commentaire en haut.

Autotab est assez intelligent, mais peut être confus de temps en temps, notamment parce que ceux-ci ont été maintenus de manière incohérente en utilisant différents styles d'indentation.

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

Cela 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 d'instruction C, sans oublier les lignes vides évidentes.

1
Kaz