Как сохранить настройки типа файла VIM для файла, который обнаружен неправильно?

1252
billynoah

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

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

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

РЕДАКТИРОВАТЬ 27/08/13 5:18 вечера (так как суперпользователь не позволяет мне публиковать .. что я мог бы добавить, глупо)

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

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

в

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

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

2
* Никогда * ничего не делайте в `/ usr / share / vim /`: все ваши пользовательские вещи должны находиться в вашем файле ~ ~ / .vimrc` и вашем каталоге ~ ~ / .vim /. romainl 10 лет назад 0
"Никогда" и "Должен" - некоторые довольно сильные слова, приятель. Я верю, что могу делать все, что захочу, и я только что сделал. Однако, если вы не согласны с моим методом, я согласен с этим, но, возможно, вы хотели бы объяснить, почему вежливо и продуктивно? billynoah 10 лет назад 0
1. Все, что находится в `/ usr / share / vim /`, может быть заменено во время следующего обновления; Вы хотите, чтобы ваши изменения исчезли без возможности вернуть их? 2. Цель этого каталога - обеспечить базовую среду; мастеринг с ним влияет на стабильность и поведение Вима непредсказуемым образом. Ваше изменение, вероятно, безобидно, но любое будущее изменение не может быть. 3. У вас есть специальное место под вашим контролем, где вы можете делать все, что хотите, чтобы изменить поведение Vim безопасно и без необходимости прав администратора, используйте его. 4. «~» - это место, где вы традиционно выполняете все свои настройки; используй это. romainl 10 лет назад 1
благодарю вас. это здравый смысл, и я приму ваш совет по этому поводу. billynoah 10 лет назад 0

2 ответа на вопрос

7
grawity

Один из способов - добавить моделину в начало или конец файла. Базовая моделиния 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 ).

Спасибо большое! Я не знал о моделинах. И да, я смутно помню это расширение .com из сценариев DCL на VMS в 80-х годах. billynoah 10 лет назад 0
3
garyjohn

Как это сделать, описано во встроенном справочном руководстве 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