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