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.
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:
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.
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.
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
filetype plugin indent on
dans votrevimrc
.filetype plugin on
est défini, le chemin d'accès de vim inclut les fichiersftplugin/<filetype>.vim
etafter/ftplugin/<filetype>/vim
dans son chemin d'accès.Vous pouvez le faire avec des autocommandes dans votre
.vimrc
.Par exemple, j'ai une fonction
html_like_mode
qui configure diverses choses pour l'édition de fichiers HTML. Dans mon.vimrc
, j'ai:C'est la clé de l'extension de fichier. Vous pouvez également désactiver le type de fichier, si cela est activé:
Comme vous pouvez le voir, vous pouvez le faire exécuter n’importe quelle commande. Donc, vous pouvez facilement faire un
setlocal shiftwidth 4
pour vos fichiers * .c.la source
augroup
vous 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 utilisonsaugroup
s pour ajouter des commandes automatiques de~/.vimrc
manière à ne pas ajouter de doublons à chaque fois que nous les fournissons.la source
Occasion autocmd et FileType
la source