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?

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 <Bram@vim.org>
" 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.


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

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 ++


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.