Предпочтительным подходом является создание ~/.vim/filetype.vim
, как упоминалось :help 43.2
и объясняется в Vim FAQ 26.8 :
Лучшая альтернатива вышеуказанному подходу - создать файл filetype.vim в каталоге ~ / .vim (или в одном из каталогов, указанных в параметре «runtimepath») и добавить следующие строки:
" my filetype file
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.x setfiletype c
augroup END
Редактировать:
Это did_load_filetypes
не должно вызывать у вас никаких проблем; это потребует перезагрузки Vim только после его изменения.
Это необходимо для того, чтобы избежать многократной и ненужной загрузки этого файла, и он унаследован от базового файла ($ 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
Для получения дополнительной информации проверьте :help new-filetype
.
if
заявление? Если я оставлю это, autocmds не будут выполнены для меня.au!
заявления в группе, а именноau! BufRead,BufNewFile *.py setfiletype python
и в строке нижеau! BufRead,BufNewFile *.tpp setfiletype cpp
. Но на самом деле работает только второй. Редактирование.py
файлов не устанавливает тип файлаpython
. Я не совсем вим-гуру, поэтому я, наверное, что-то упускаю.au BufNewFile,BufRead *.py,*.pyw setf python
, поэтому ваша первая строка не имеет значения. Ваша проблема, вероятно, в другом месте."Editing .py files does not set the file type to python"
- Каков выход:set ft
на этот случай? Если это не Python, попробуйтеВы можете сделать (в вашем глобальном
.vimrc
):источник
autocmd BufEnter *.cuf :setlocal filetype=fortran
обрабатывать файлы CUDA Fortran как FortranМожно также иметь:
au BufRead,BufNewFile *.tpp setlocal filetype=cpp
в.vimrc
таком, что при открытии файла с.tpp
расширением, тип файла устанавливается для C ++источник
BufRead,BufNewFile
вместоBufEnter
?BufRead,BufNewFile
заранее,BufEnter
потому что в docs (:help BufEnter
) говорится: «BufEnter: .... Также выполняется при запуске редактирования буфера после автокоманд BufReadPost». где BufReadPost является синонимом BufRead . Кроме того, я не считаю, что:
это требуется раньше,setlocal
поэтому я также опускал это в своем ответе. (Я мог бы истолковать это совершенно неправильно, рад услышать дальнейшее обсуждение)