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.
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.
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'
.
é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
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
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.
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
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
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:
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
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.