Як сказати vim, що деякі розширення файлів є синонімами?


21

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

Відповіді:


19

Кращим підходом є створення ~/.vim/filetype.vim, як було зазначено :help 43.2та пояснено у FAQ Vim 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 не виконується для мене.
морська риба

@oarfish, навіть якщо перезапустити Vim?
mMontu

Гаразд, це дивно. Я маю au!твердження в групі, а саме au! BufRead,BufNewFile *.py setfiletype pythonі в рядку нижче au! BufRead,BufNewFile *.tpp setfiletype cpp. Але насправді працює лише другий. Редагування .pyфайлів не встановлює тип файлу python. Я не зовсім вім-гуру, тому я, мабуть, щось пропускаю.
морська риба

@oarfish, якщо ви перевірите файл, який я згадав у редагуванні, ви побачите, що він вже містить рядок з au BufNewFile,BufRead *.py,*.pyw setf python, тому ваш перший рядок не має значення. Можливо, ваша проблема в іншому місці.
mMontu

"Editing .py files does not set the file type to python"- який результат у :set ftцій справі? Якщо це не python, спробуйте дотримуватися процедури у Vim-FAQ 2.5 - у мене є проблема "xyz" (деякі) з Vim
mMontu

14

Ви можете зробити (у вашому світі .vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp

autocmd BufEnter *.cuf :setlocal filetype=fortranтрактувати файли CUDA Fortran як Fortran
khaverim

1

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


1
Це здається в основному ідентичним відповіді на @ edi9999. Чи можете ви детальніше пояснити, чому використовувати BufRead,BufNewFileзамість цього BufEnter?
морська риба

@oarfish Це не має значення , занадто багато я думаю, але я віддаю перевагу BufRead,BufNewFileпопереду , BufEnterтому що в документації ( :help BufEnter) говориться: «BufEnter: .... Також виконується при початку редагування буфера, після того, як . в BufReadPost автокомандами» де BufReadPost є синонімом BufRead . Крім того, я не вважаю, що :це потрібно раніше, setlocalтому я також пропустив це у своїй відповіді. (Я, можливо, трактував це абсолютно неправильно, радий почути подальше обговорення)
tallamjr,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.