Modification du comportement D'indentation Vim par type de fichier

est-ce que quelqu'un pourrait m'expliquer en termes simples la façon la plus facile de changer le comportement d'indentation de Vim basé sur le type de fichier? Par exemple, si j'ouvre un fichier Python il devrait tiret avec 2 places, mais si j'ouvre un script Powershell il doit utiliser 4 espaces.

316
demandé sur Matthias Braun 2008-10-01 22:17:44

10 réponses

vous pouvez ajouter des fichiers .vim à exécuter chaque fois que vim passe à 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

qui fait que vim utilise des onglets avec 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 vers le bas jusqu'à la section sur les plugins filetype.

261
répondu SpoonMeiser 2008-10-03 10:21:12

utilisez ftplugins ou autocommands pour définir les options. ( :h ftplugin pour plus d'information)

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

setlocal sw=2 sts=2 et

et n'oubliez pas de les allumer dans ~/.vimrc

filetype plugin indent on

ou dans ~/.vimrc

au FileType python setl sw=2 sts=2 et

je suggère aussi d'apprendre la différence entre 'ts' et 'sts' . Beaucoup de gens ne connaissent pas 'sts' .

137
répondu graywh 2018-09-20 14:46:05

éditez votre ~/.vimrc , et ajoutez différents types de fichiers pour différents tirets,par exemple je veux html/rb tiret pour 2 espaces, et js/coffee tiret de fichiers 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 à: Configuration de Vim espaces préférences par type de fichiers

66
répondu Siwei Shen申思维 2017-12-01 15:55:34

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 =

52
répondu Paul Tomblin 2008-10-01 18:21:31

je travaille habituellement avec expandtab set, mais c'est mauvais pour makefiles. J'ai récemment ajouté:

:autocmd FileType make set noexpandtab

à la fin de mes .fichiers vimrc et il reconnaît Makefile makefile, et *.mk comme les makefiles et de ne pas augmenter les onglets. Probablement, vous pouvez étendre cela.

23
répondu Jonathan Leffler 2008-10-01 18:23:34

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

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

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
13
répondu Nello 2012-05-03 11:49:50

cela pourrait être connu par la plupart d'entre nous, mais de toute façon (j'ai été intrigué ma première fois): Faire :set et ( :set expandtabs) ne change pas les onglets déjà existants dans le fichier, il faut faire :retab . Par exemple:

:set et
:retab

et les onglets du fichier sont remplacés par suffisamment d'espaces. Pour avoir les onglets en arrière il suffit de faire:

:set noet
:retab
5
répondu Juan Lanus 2012-03-24 10:57:17

alors que vous pouvez configurer l'indentation de Vim très bien en utilisant le plugin indent ou manuellement en utilisant les 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 pointe 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 (tab vs espace et nombre d'espaces), c'était incroyablement frustrant. Mais Vindect avec ce fichier d'indentation

vous recommandons Également:

3
répondu haridsv 2013-07-25 08:42:01

Aujourd'hui , vous pouvez essayer editorconfig , Il ya aussi un vim plugin pour elle. Avec cela, vous pouvez non seulement changer la taille de l'indentation dans vim, mais dans beaucoup d'autres éditeurs, garder des styles de codage cohérents.

ci-dessous est un simple editorconfig, comme vous pouvez le voir, les fichiers python auront 4 espaces pour l'indentation, et les fichiers de template 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
2
répondu chengbo 2017-06-02 23:15:51

j'utilise un utilitaire que j'ai écrit en C appelé autotab . Il analyse les premiers milliers de lignes d'un fichier que vous chargez et détermine les valeurs des paramètres Vim shiftwidth , tabstop et expandtab .

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 confondu de temps en temps le temps, en particulier par ceux qui ont été maintenus de manière incohérente en utilisant des styles d'indentation différents.

si un fichier utilise évidemment des onglets, ou une combinaison d'onglets et d'espaces, pour l'indentation, Autotab va comprendre quelle taille d'onglet est utilisé en considérant des facteurs comme l'alignement des éléments internes à travers les lignes successives, tels que les commentaires.

fonctionne pour une variété de langages de programmation, et est indulgente pour les éléments "hors bande" qui ne ne pas respecter les incréments d'indentation, tels que les directives de prétraitement C, les étiquettes de déclaration C, sans mentionner les lignes vierges évidentes.

1
répondu Kaz 2015-12-05 02:22:17