¿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?

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

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


¿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

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.