Как мне сказать vim, что некоторые расширения файлов являются синонимами?

21

Я редактирую код C ++ в .cppфайлах, а код шаблона - в .tccфайлы. Когда я открываю такой файл, подсветка синтаксиса недоступна. Я попытался set syntax=cppв tpp.vimфайле ~/.vim/ftplugin/, но он ничего не делает, а в редакторе работает. Есть ли способ заставить vim рассматривать определенные расширения как синонимы другим?

Oarfish
источник

Ответы:

19

Предпочтительным подходом является создание ~/.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.

mMontu
источник
Почему ifзаявление? Если я оставлю это, autocmds не будут выполнены для меня.
oarfish
@oarfish, даже если вы перезапустите Vim?
mMontu
Ок, это странно. У меня есть au!заявления в группе, а именно au! BufRead,BufNewFile *.py setfiletype pythonи в строке ниже au! BufRead,BufNewFile *.tpp setfiletype cpp. Но на самом деле работает только второй. Редактирование .pyфайлов не устанавливает тип файла python. Я не совсем вим-гуру, поэтому я, наверное, что-то упускаю.
oarfish
@oarfish, если вы проверите файл, который я упомянул при редактировании, вы обнаружите, что он уже содержит строку au BufNewFile,BufRead *.py,*.pyw setf python, поэтому ваша первая строка не имеет значения. Ваша проблема, вероятно, в другом месте.
mMontu
"Editing .py files does not set the file type to python"- Каков выход :set ftна этот случай? Если это не Python, попробуйте
выполнить
14

Вы можете сделать (в вашем глобальном .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp
edi9999
источник
autocmd BufEnter *.cuf :setlocal filetype=fortranобрабатывать файлы CUDA Fortran как Fortran
хаверим
1

Можно также иметь: au BufRead,BufNewFile *.tpp setlocal filetype=cppв .vimrcтаком, что при открытии файла с .tppрасширением, тип файла устанавливается для C ++

tallamjr
источник
1
Похоже, это в основном совпадает с ответом @ edi9999. Можете ли вы уточнить, почему использовать BufRead,BufNewFileвместо BufEnter?
oarfish
@oarfish Я думаю, это не имеет большого значения, но я предпочитаю BufRead,BufNewFileзаранее, BufEnterпотому что в docs ( :help BufEnter) говорится: «BufEnter: .... Также выполняется при запуске редактирования буфера после автокоманд BufReadPost». где BufReadPost является синонимом BufRead . Кроме того, я не считаю, что :это требуется раньше, setlocalпоэтому я также опускал это в своем ответе. (Я мог бы истолковать это совершенно неправильно, рад услышать дальнейшее обсуждение)
tallamjr