Question

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 indenter deux espaces, mais si j’ouvre un script Powershell, il doit en utiliser quatre.

Était-ce utile?

La solution

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 amène vim à utiliser 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.

Autres conseils

Utilisez ftplugins ou autocommands 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 de connaître la différence entre tabstop et softtabstop . Beaucoup de gens ne connaissent pas softtabstop .

modifiez votre ~ / .vimrc et ajoutez différents types de fichiers pour différents retraits, par exemple. Je souhaite l'indentation html / rb pour 2 espaces et l'indentation js / coffee sur 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 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 l'ensemble 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 en tant que makefiles et ne développe pas les onglets. Vraisemblablement, vous pouvez prolonger cela.

Je suis toujours étonné par les personnes qui modifient 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

Cela peut être connu de la plupart d’entre nous, mais de toute façon (j’étais perplexe la première fois): Faire : set et (: set expandtabs) ne modifie pas les onglets déjà présents dans le fichier, il faut faire : retab . Par exemple:

:set et
:retab

et les onglets du fichier sont remplacés par un espace suffisant. Pour avoir des onglets en arrière, faites simplement:

:set noet
:retab

Aujourd'hui, vous pouvez essayer editorconfig , un plug-in 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 appropriés pour vous 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 personnes avec différents styles d'indentation (tabulation / espace et nombre d'espaces), c'était incroyablement frustrant. Mais vindectez avec ce fichier de retrait

Recommander aussi:

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 se trouvent dans l’en-tête de commentaire en haut.

Autotab est assez intelligent, mais peut être confus de temps en temps, en particulier 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 tabulations ou une combinaison de tabulations et d'espaces pour l'indentation, Autotab déterminera la taille de la tabulation utilisée en tenant compte de facteurs tels que l'alignement des éléments internes sur des lignes successives, telles que les commentaires.

Cela fonctionne pour une variété de langages de programmation et pardonne les "hors bande". les éléments qui n'obéissent pas aux incréments d'indentation, tels que les directives de prétraitement C, les étiquettes d'instructions C, sans oublier les lignes vierges évidentes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top