¿Cómo le digo a vim que algunas extensiones de archivo son sinónimos?

21

Edito el código C ++ en los .cpparchivos, mientras que el código de la plantilla entra en los .tccarchivos. Cuando abro dicho archivo, no hay resaltado de sintaxis disponible. Intenté set syntax=cppen un tpp.vimarchivo ~/.vim/ftplugin/, pero no hace nada, mientras que en el editor funciona. ¿Hay alguna forma de que vim trate extensiones específicas como sinónimos de otras?

pez remo
fuente

Respuestas:

19

El enfoque preferido es crear un ~/.vim/filetype.vim, como se menciona :help 43.2y explica en la Pregunta frecuente 26.8 de Vim :

Una mejor alternativa al enfoque anterior es crear un archivo filetype.vim en el directorio ~ / .vim (o en uno de los directorios especificados en la opción 'runtimepath') y agregar las siguientes líneas:

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

Editar:

El did_load_filetypesno debería causarte ningún problema; solo requeriría un reinicio de Vim después de cambiarlo.

Es necesario para evitar la carga múltiple e innecesaria de este archivo, y se hereda del archivo 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

Para más información consultar :help new-filetype.

mMontu
fuente
¿Por qué la ifdeclaración? Si lo dejo, los autocmds no se ejecutan para mí.
pez remo
@oarfish incluso si reinicia Vim?
mMontu
Ok, esto es raro Tengo que hacer au!declaraciones en el grupo, a saber, au! BufRead,BufNewFile *.py setfiletype pythony en la línea a continuación au! BufRead,BufNewFile *.tpp setfiletype cpp. Pero solo el segundo realmente funciona. La edición de .pyarchivos no establece el tipo de archivo en python. No soy exactamente un vim-guru, así que probablemente me estoy perdiendo algo.
pez remo
@oarfish si revisas el archivo que mencioné en la edición, encontrarás que ya contiene una línea au BufNewFile,BufRead *.py,*.pyw setf python, por lo que tu primera línea es irrelevante. Su problema probablemente esté en otra parte.
mMontu
"Editing .py files does not set the file type to python"- ¿Cuál es el resultado de :set ftese caso? Si no es Python, intente seguir el procedimiento en Vim-FAQ 2.5 - Tengo un problema "xyz" (algo) con Vim
mMontu
14

Podrías hacer (en tu global .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp
edi9999
fuente
autocmd BufEnter *.cuf :setlocal filetype=fortrantratar los archivos de CUDA Fortran como Fortran
khaverim
1

También se podría tener: au BufRead,BufNewFile *.tpp setlocal filetype=cppen .vimrctal forma que al abrir un archivo con .tppextensión, el tipo de archivo se configura para C ++

tallamjr
fuente
1
Esto parece ser básicamente idéntico a la respuesta de @ edi9999. ¿Puedes explicar por qué usar en BufRead,BufNewFilelugar de BufEnter?
pez remo
@oarfish Creo que no importa demasiado, pero prefiero BufRead,BufNewFileantes BufEnterporque en los documentos ( :help BufEnter) dice: "BufEnter: .... También se ejecuta al comenzar a editar un búfer, después de los comandos automáticos BufReadPost". donde BufReadPost es sinónimo de BufRead . Además, no creo que :se requiera antes, setlocalasí que también omití eso en mi respuesta. (Podría haber interpretado esto completamente mal, feliz de escuchar más discusión)
tallamjr