Persistente: ¿establecer la sintaxis para un tipo de archivo determinado?

103

Estoy trabajando en un proyecto Symfony2 que usa Twig, y los tipos de archivo son myfile.html.twig. Vim no detecta automáticamente el resaltado de sintaxis y, por lo tanto, no aplica ninguno. Puedo usarlo :set syntax=HTMLdespués de abrir el archivo, pero esto es un problema al saltar entre archivos.

¿Hay alguna manera de establecer de manera persistente el resaltado de sintaxis para un tipo de archivo específico en vim?

Bendihossan
fuente

Respuestas:

114

Puede usar autocmdpara lograr eso, es decir:

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

Deberia trabajar.

Hauleth
fuente
4
Un amigo me acaba de señalar esto también. Establezca el tipo de archivo: au BufRead,BufNewFile *.html.twig set filetype=twigau BufRead,BufNewFile *.html.twig set syntax=HTML
establezca
27
Sugeriría poner esta línea en el ~/.vim/ftdetect/html.twig.vimarchivo (debería crearla), que es el lugar correcto para dichos comandos automáticos.
xaizek
@xaizek Entiendo que se recomienda, pero ¿tiene alguna idea de por qué no me funciona si lo coloco en ~/.vimrclugar de ~/.vim/ftdetect/?
Haralan Dobrev
2
@HaralanDobrev, probablemente se sobrescriba con otro autocomando definido después de esta línea. Ejecute :autocmd BufNewFile,BufRead *.html.twigdentro de Vim para ver todos los comandos automáticos registrados (también intente con eventos separados, solo BufNewFiley solo BufRead). También verifique la salida de :verbose set syntax?.
xaizek
1
Lo fácil que fue encontrar esta solución me hace desear que la wiki de vim no existiera
Jared Beach
59

Agregue uno de los siguientes pasajes a su .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

o

" 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
fuente
6
Esta es una respuesta genérica mejor que la aceptada. Si vim no puede detectar el tipo de archivo (y proporcionar automáticamente el resaltado de sintaxis), es mejor establecer el tipo de archivo en lugar de solo la sintaxis del archivo.
mrfred
1
setfiletypedebería ser set filetypeAl menos así es como podría hacerlo funcionar
dau_sama
1
@dau_sama setfiletype=htmlno es una sintaxis válida; He arreglado la respuesta. Tenga en cuenta eso setfiletype htmly set filetype=htmlhaga cosas diferentes, como se menciona en la respuesta.
bdesham
10
au BufNewFile,BufRead,BufReadPost *.twig set syntax=HTML

Y agregue esta línea ~/.vimrcpara que la configuración sea persistente.

Igor Chubin
fuente
2

Sé que esto no responde directamente a la pregunta, sin embargo, esto responde a la intención de la pregunta, que es hacer que el resaltado de sintaxis funcione con Twig / Symfony 2

Le sugiero que consulte https://github.com/beyondwords/vim-twig (no el mío), que proporciona:

  • el archivo de resaltado de sintaxis para * .html.twig,
  • detección de tipo de archivo para el mismo y
  • complemento de tipo de archivo, que le permite modificar varias configuraciones según sea necesario al editar archivos * .html.twig

espero que esto ayude

mano de ébano
fuente