Comment puis-je modifier l'indentation par défaut en fonction du type de fichier?

34

Je voudrais avoir différentes empreintes en fonction du type de fichier sur lequel je travaille. Par exemple, si vous travaillez sur un .cfichier, mon retrait doit comporter 4 espaces. Dans les .htmlfichiers, j'aimerais travailler avec des onglets.

Comment puis-je y arriver?

DeltaLima
la source

Réponses:

25

La meilleure méthode consiste à définir ces paramètres ~/.vim/after/ftplugin/<filetype>.vim.

Pour HTML (en supposant que vous vouliez des onglets de 4 caractères):

~/.vim/after/ftplugin/html.vim

setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab

Il est préférable d'utiliser un ftplugin plutôt que d'utiliser des autocommandes car Vim effectue déjà des vérifications de type de fichier et tente déjà de trouver le ftplugin adéquat. Il n'y a donc aucune raison de forcer encore plus de vérifications et de réimplémenter la molette.

-- modifier --

En supposant que vous ayez filetype plugin ondans vimrc- ce que vous devriez - Vim essaiera de détecter le type de fichier des fichiers que vous éditez et, une fois que le type de fichier correct est trouvé et défini pour le tampon, essayez de trouver le ftplugin correspondant dans ces emplacements standard:

$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim

Tout cela se produit automatiquement, donc si votre type de fichier est reconnu par Vim, il n’ya aucune raison d’ajouter une logique de détection de type de fichier: ajoutez simplement vos paramètres au bon ftplugin et vous êtes bon.

romainl
la source
Dois-je activer le ftplugin d'une manière ou d'une autre ou la création du ou des fichiers l'activera automatiquement?
DeltaLima
Assurez-vous que vous avez filetype plugin indent ondans votre vimrc.
Romainl
1
@ DeltaLima vim a un chemin par lequel il vérifie les paramètres. Tant qu'il filetype plugin onest défini, le chemin d'accès de vim inclut les fichiers ftplugin/<filetype>.vimet after/ftplugin/<filetype>/vimdans son chemin d'accès.
davidlowryduda
@ DeltaLima, s'il vous plaît voir mon édition.
Romainl
14

Vous pouvez le faire avec des autocommandes dans votre .vimrc.

Par exemple, j'ai une fonction html_like_modequi configure diverses choses pour l'édition de fichiers HTML. Dans mon .vimrc, j'ai:

au BufNewFile,BufRead *.html call s:html_like_mode()

C'est la clé de l'extension de fichier. Vous pouvez également désactiver le type de fichier, si cela est activé:

au FileType perl setlocal equalprg=perltidy

Comme vous pouvez le voir, vous pouvez le faire exécuter n’importe quelle commande. Donc, vous pouvez facilement faire un setlocal shiftwidth 4pour vos fichiers * .c.

derobert
la source
9

augroupvous permet de regrouper les autocommandes associées dans des groupes nommés. (Voir ici pour en savoir plus sur les groupes de commandes automatiques.) Nous utilisons augroups pour ajouter des commandes automatiques de ~/.vimrcmanière à ne pas ajouter de doublons à chaque fois que nous les fournissons.

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
shawndumas
la source
2
Il serait utile que vous expliquiez ce que cela fait et comment le configurer, tout le monde ne le saura pas;)
Seth le
3

Occasion autocmd et FileType

autocmd FileType html setlocal shiftwidth=4 tabstop=4
avelino
la source