Comment puis-je dire à vim que certaines extensions de fichiers sont synonymes?

21

J'édite le code C ++ dans les .cppfichiers, tandis que le code du modèle va dans les .tccfichiers. Lorsque j'ouvre un tel fichier, aucune coloration syntaxique n'est disponible. J'ai essayé set syntax=cppdans un tpp.vimfichier en ~/.vim/ftplugin/, mais ça ne fait rien, alors que dans l'éditeur ça marche. Existe-t-il un moyen pour que vim traite des extensions spécifiques comme synonymes?

oarfish
la source

Réponses:

19

L'approche préférée consiste à créer un ~/.vim/filetype.vim, comme mentionné :help 43.2et expliqué dans la FAQ 26.8 de Vim :

Une meilleure alternative à l'approche ci-dessus consiste à créer un fichier filetype.vim dans le répertoire ~ / .vim (ou dans l'un des répertoires spécifiés dans l'option 'runtimepath') et ajoutez les lignes suivantes:

" my filetype file
if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufRead,BufNewFile *.x       setfiletype c
augroup END

Éditer:

Le did_load_filetypesne devrait pas vous causer des problèmes; il ne nécessiterait un redémarrage de Vim qu'après avoir été modifié.

Il est nécessaire pour éviter le chargement multiple et inutile de ce fichier, et il est hérité du fichier de base ($ VIMRUNTIME / filetype.vim):

" Vim support file to detect file types
"
" Maintainer:   Bram Moolenaar <[email protected]>
" Last Change:  2014 Jun 12

" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
  finish
endif
let did_load_filetypes = 1

Pour plus d'informations, consultez :help new-filetype.

mMontu
la source
Pourquoi la ifdéclaration? Si je le laisse, les autocmds ne sont pas exécutés pour moi.
Oarfish
@oarfish même si vous redémarrez Vim?
mMontu
Ok, c'est bizarre. Je dois des au!déclarations dans le groupe, à savoir au! BufRead,BufNewFile *.py setfiletype pythonet dans la ligne ci-dessous au! BufRead,BufNewFile *.tpp setfiletype cpp. Mais seul le second fonctionne réellement. La modification de .pyfichiers ne définit pas le type de fichier sur python. Je ne suis pas exactement un vim-gourou donc je manque probablement quelque chose.
Oarfish
@oarfish si vous vérifiez le fichier que j'ai mentionné lors de la modification, vous constaterez qu'il contient déjà une ligne avec au BufNewFile,BufRead *.py,*.pyw setf python, donc votre première ligne n'est pas pertinente. Votre problème est probablement ailleurs.
mMontu
"Editing .py files does not set the file type to python"- quelle est la sortie de :set ftce cas? S'il ne s'agit pas de python, essayez de suivre la procédure dans Vim-FAQ 2.5 - J'ai un problème "xyz" (certains) avec Vim
mMontu
14

Vous pourriez faire (dans votre global .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp
edi9999
la source
autocmd BufEnter *.cuf :setlocal filetype=fortrantraiter les fichiers CUDA Fortran comme Fortran
khaverim
1

On pourrait également avoir: au BufRead,BufNewFile *.tpp setlocal filetype=cppdans leur .vimrctel que lors de l'ouverture d'un fichier avec l' .tppextension, filetype est défini pour C ++

tallamjr
la source
1
Cela semble être fondamentalement identique à la réponse de @ edi9999. Pouvez-vous expliquer pourquoi utiliser à la BufRead,BufNewFileplace de BufEnter?
Oarfish
@oarfish Cela n'a pas trop d'importance, je pense, mais je préfère BufRead,BufNewFileavant BufEntercar dans la documentation ( :help BufEnter), il est indiqué: "BufEnter: .... Également exécuté lors du démarrage de l'édition d'un tampon, après les autocommandes BufReadPost." où BufReadPost est synonyme de BufRead . De plus, je ne pense pas que ce :soit nécessaire auparavant setlocal, j'ai donc omis cela dans ma réponse. (J'aurais peut-être mal interprété cela, heureux d'entendre plus de discussions)
tallamjr