Persistant: définir la syntaxe pour un type de fichier donné?

103

Je travaille sur un projet Symfony2 qui utilise Twig, et les types de fichiers sont myfile.html.twig. Vim ne détecte pas automatiquement la coloration syntaxique et n'en applique donc aucune. Je peux utiliser :set syntax=HTMLaprès avoir ouvert le fichier, mais c'est une douleur lors du saut entre les fichiers.

Existe-t-il un moyen de définir de manière persistante la coloration syntaxique d'un type de fichier spécifique dans vim?

Bendihossan
la source

Réponses:

114

Vous pouvez utiliser autocmdpour accomplir cela, c'est-à-dire:

augroup twig_ft
  au!
  autocmd BufNewFile,BufRead *.html.twig   set syntax=html
augroup END

Devrait marcher.

Hauleth
la source
4
Un ami vient de me le signaler également. Définissez le type de fichier: au BufRead,BufNewFile *.html.twig set filetype=twigDéfinissez la syntaxe:au BufRead,BufNewFile *.html.twig set syntax=HTML
Bendihossan
27
Je suggérerais de mettre cette ligne dans un ~/.vim/ftdetect/html.twig.vimfichier (vous devriez la créer), qui est le bon endroit pour de telles autocommandes.
xaizek
@xaizek Je comprends que c'est recommandé, mais avez-vous une idée pourquoi cela ne fonctionne pas pour moi si je mets en ~/.vimrcplace à la place de ~/.vim/ftdetect/?
Haralan Dobrev
2
@HaralanDobrev, il est probablement écrasé par une autre autocommande définie après cette ligne. Exécutez :autocmd BufNewFile,BufRead *.html.twigdans Vim pour voir toutes les autocommandes enregistrées (essayez également avec des événements séparés, uniquement BufNewFileet uniquement BufRead). Vérifiez également la sortie de :verbose set syntax?.
xaizek
1
La facilité avec laquelle il était de trouver cette solution me fait souhaiter que le wiki vim n'existait pas
Jared Beach
59

Ajoutez l'un des passages suivants à votre .vimrc:

" Set the filetype based on the file's extension, overriding any
" 'filetype' that has already been set
au BufRead,BufNewFile *.html.twig set filetype=html

ou

" Set the filetype based on the file's extension, but only if
" 'filetype' has not already been set
au BufRead,BufNewFile *.html.twig setfiletype html
Muhammad Reda
la source
6
C'est une meilleure réponse générique que celle acceptée. Si vim ne peut pas détecter le type de fichier (et fournit automatiquement la coloration syntaxique), il est préférable de définir le type de fichier plutôt que simplement la syntaxe du fichier.
mrfred
1
setfiletypedevrait être set filetypeAu moins c'est comme ça que je pourrais le faire fonctionner
dau_sama
1
@dau_sama setfiletype=htmln'est pas une syntaxe valide; J'ai corrigé la réponse. Notez cela setfiletype htmlet set filetype=htmlfaites des choses différentes, comme mentionné dans la réponse.
bdesham le
10
au BufNewFile,BufRead,BufReadPost *.twig set syntax=HTML

Et ajoutez cette ligne à ~/.vimrcpour rendre les paramètres persistants.

Igor Chubin
la source
2

Je sais que cela ne répond pas directement à la question, mais cela répond à l'intention de la question, qui est de faire en sorte que la coloration syntaxique fonctionne avec Twig / Symfony 2

Je vous suggère de consulter https://github.com/beyondwords/vim-twig (pas le mien), qui fournit:

  • le fichier de coloration syntaxique pour * .html.twig,
  • détection du type de fichier pour le même, et
  • plugin de type de fichier, vous permettant de modifier divers paramètres selon les besoins lors de l'édition de fichiers * .html.twig

J'espère que ça aide

ébène
la source