2

Конфигурационный файл Apache для моего сайта называется mywebsite.com . Очевидно, расширение .com заставляет vim установить неправильный тип файла как dcl что делает подсветку синтаксиса также неправильной. Все остальные мои файлы конфигурации хоста правильно определены как файлы Apache.

Я могу :set filetype=apache и все выглядит великолепно, но когда после закрытия vim и возвращения к редактированию тип файла снова возвращается в dcl .

Кроме переименования моего файла конфигурации хоста, есть ли решение для этого? Есть ли способ заставить vim запомнить тип файла этого конкретного файла? Или еще лучше, есть ли способ исправить это неправильное определение типа файла?

3 ответа3

8

Один из способов - добавить моделину в начало или конец файла. Базовая моделиния Vim выглядит следующим образом:

# vim: ft=apache

Сам символ комментария игнорируется Vim. Существует также альтернативный синтаксис, который позволяет также следующие символы комментария:

/* vim: set ft=apache: */

Emacs и некоторые другие редакторы вместо этого используют -*- mode: apache -*- .


Если вы хотите переопределить определение типа файла по расширению, вы можете добавить следующее в ваш ~/.vim/filetype.vim:

augroup filetypedetect
  au BufNewFile,BufRead *.com setl ft=apache
augroup END

(Я не уверен, что setf apache или setl ft=apache лучше.)


Обратите внимание, что обнаружение не совсем неправильно, оно просто неточно. Операционная система OpenVMS использует .com в качестве расширения для "командных" файлов - во многом как сценарии оболочки или командные файлы - и они написаны на языке оболочки OpenVMS, DCL (DIGITAL Command Language).

4

Как это сделать, описано во встроенном справочном руководстве Vim под

:help new-filetype

Как описано в разделе C.2., Создайте файл с именем ~/.vim/filetype.vim со следующим содержимым:


if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufRead,BufNewFile *.com setfiletype apache
augroup END

При этом любой файл, оканчивающийся на .com будет распознаваться как apache Если вы хотите, чтобы распознавался только mywebsite.com , измените эту строку au на

au! BufRead,BufNewFile mywebsite.com setfiletype apache
0

В качестве дополнения к обоим ответам ниже я хотел бы поделиться тем, что я сделал в конце, чтобы изменить основной файл конфигурации /usr/share/vim/vim73/filetype.vim из:

au BufNewFile, BufRead * .com вызывает s:BindzoneCheck('dcl')

в

au BufNewFile, BufRead * .com вызовы:BindzoneCheck('apache')

Я понимаю, что это может не подходить для каждого пользователя, особенно если вы когда-нибудь намереваетесь написать сценарии dcl, но в моем случае это нормально.

Примечание. Я перенес это из правки моего вопроса в правильный ответ. В то время, когда я писал это, у меня не было достаточно представителей, чтобы добавить ответ, но теперь я делаю. Пользователь @romainl привел несколько веских причин не делать этого таким образом в комментарии к моему вопросу выше, но, по крайней мере, я думаю, что это полезно, потому что это помогает пролить свет на происхождение этих ассоциаций типов файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .