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.
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.
Utilisez les ftplugins ou les autocommandes pour définir les options.
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)
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
.
é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
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 =
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.
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
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
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
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:
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.