A abordagem preferida é criar um ~/.vim/filetype.vim
, conforme mencionado :help 43.2
e explicado no Vim FAQ 26.8 :
Uma alternativa melhor à abordagem acima é criar um arquivo filetype.vim no diretório ~ / .vim (ou em um dos diretórios especificados na opção 'runtimepath') e adicionar as seguintes linhas:
" my filetype file
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.x setfiletype c
augroup END
Editar:
O did_load_filetypes
não deve lhe causar problemas; isso exigiria apenas uma reinicialização do Vim após a alteração.
É necessário para evitar o carregamento múltiplo e desnecessário deste arquivo e é herdado do arquivo 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 mais informações, consulte :help new-filetype
.
if
declaração? Se eu deixar, os autocmds não são executados para mim.au!
declarações no grupo, ou seja,au! BufRead,BufNewFile *.py setfiletype python
na linha abaixoau! BufRead,BufNewFile *.tpp setfiletype cpp
. Mas apenas o segundo realmente funciona. A edição de.py
arquivos não define o tipo de arquivo parapython
. Eu não sou exatamente um vim-guru, então provavelmente estou perdendo alguma coisa.au BufNewFile,BufRead *.py,*.pyw setf python
, portanto sua primeira linha é irrelevante. Seu problema provavelmente está em outro lugar."Editing .py files does not set the file type to python"
- qual é o resultado:set ft
desse caso? Se não for python, tente seguir o procedimento no Vim-FAQ 2.5 - Eu tenho um problema "xyz" (alguns) com o VimVocê poderia fazer (no seu mundo
.vimrc
):fonte
autocmd BufEnter *.cuf :setlocal filetype=fortran
para deleite CUDA Fortran arquivos como FortranPode-se também:
au BufRead,BufNewFile *.tpp setlocal filetype=cpp
em sua.vimrc
forma que ao abrir um arquivo com.tpp
extensão, filetype está definido para C ++fonte
BufRead,BufNewFile
vez deBufEnter
?BufRead,BufNewFile
antes,BufEnter
porque nos documentos (:help BufEnter
) ele afirma: "BufEnter: .... Também é executado quando você começa a editar um buffer, após os comandos automáticos do BufReadPost." onde BufReadPost é sinônimo de BufRead . Além disso, não acredito que isso:
seja necessário antes,setlocal
por isso também o omiti na minha resposta. (Eu poderia ter interpretado isso completamente errado, feliz ao ouvir uma discussão mais aprofundada)