Wie kann ich die Einstellungen für den VIM-Dateityp für eine Datei speichern, die falsch erkannt wird?

1341
billynoah

Die Apache-Konfigurationsdatei für meine Website wird benannt mywebsite.com. Offenbar .combewirkt die Erweiterung, dass vim den falschen Dateityp festlegt dcl, wodurch auch die Syntax-Hervorhebung falsch ist. Alle meine anderen Host-Konfigurationsdateien werden korrekt als Apache-Dateien identifiziert.

Ich bin in der Lage :set filetype=apacheund alles sieht toll aus, aber wenn nach dem Schließen von vim und dem Zurückkehren zum Bearbeiten der Dateityp wieder verfügbar ist dcl.

Gibt es außer der Umbenennung meiner Host-Konfigurationsdatei eine Lösung dafür? Gibt es eine Möglichkeit, vim an den Dateityp dieser einen bestimmten Datei erinnern zu lassen? Oder noch besser: Gibt es eine Möglichkeit, diese falsche Dateityperkennung zu korrigieren?

EDIT 27.08.13 17:18 (da Superuser mir nicht erlaubt zu posten .. was ich hinzufügen könnte, ist dumm)

Als Ergänzung zu beiden Antworten möchte ich Ihnen mitteilen, was ich am Ende getan habe, nämlich die Hauptkonfigurationsdatei /usr/share/vim/vim73/filetype.vim von:

au BufNewFile, BufRead * .com-Aufruf s: BindzoneCheck ('dcl')

zu

au BufNewFile, BufRead * .com-Aufruf s: BindzoneCheck ('apache')

Mir ist klar, dass dies nicht für jeden Benutzer geeignet ist, insbesondere wenn Sie beabsichtigen, dcl-Skripts zu schreiben, aber in meinem Fall ist dies in Ordnung.

2
* Niemals * etwas in `/ usr / share / vim /` tun: Alle benutzerdefinierten Dateien müssen sich in Ihrer `~ / .vimrc'-Datei und Ihrem` ~ / .vim / `-Verzeichnis befinden. romainl vor 10 Jahren 0
"Niemals" und "Muss" sind ein paar ziemlich starke Worte. Ich glaube, ich kann machen, was ich möchte, und ich habe es einfach getan. Wenn Sie mit meiner Methode nicht einverstanden sind, bin ich damit einverstanden, aber Sie möchten vielleicht höflich und produktiv erklären, warum? billynoah vor 10 Jahren 0
1. Alles unter `/ usr / share / vim /` kann beim nächsten Upgrade ersetzt werden. Möchten Sie, dass Ihre Änderungen verschwinden, ohne dass Sie sie zurückbekommen können? 2. Der Zweck dieses Verzeichnisses ist die Bereitstellung einer Basisumgebung. Wenn man daran bastelt, wirkt sich das auf unvorhersehbare Weise auf Vims Stabilität und Verhalten aus. Ihre Änderung ist wahrscheinlich harmlos, aber eine zukünftige Änderung ist möglicherweise nicht möglich. 3. Sie haben einen speziellen Ort unter Ihrer Kontrolle, an dem Sie alles tun können, um das Verhalten von Vim sicher und ohne Administratorrechte zu ändern. Verwenden Sie es. 4. In "~" führen Sie traditionell Ihre gesamte Konfiguration durch. benutze es. romainl vor 10 Jahren 1
thank you. that's some sound reasoning and i'll take your advice on this. billynoah vor 10 Jahren 0

2 Antworten auf die Frage

7
grawity

Eine Möglichkeit ist, eine Modeline am Anfang oder Ende der Datei hinzuzufügen . Eine grundlegende Vim Modeline sieht so aus:

# vim: ft=apache 

Das Kommentarzeichen selbst wird von Vim ignoriert. Es gibt auch eine alternative Syntax, die auch folgende Kommentarzeichen erlaubt:

/* vim: set ft=apache: */ 

Emacs und einige andere Editoren verwenden -*- mode: apache -*-stattdessen.


Wenn Sie die Dateityperkennung nach Erweiterung überschreiben möchten, können Sie Folgendes zu Ihrem hinzufügen ~/.vim/filetype.vim:

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

(Ich bin nicht sicher, ob setf apacheoder setl ft=apachebesser ist.)


Beachten Sie, dass die Erkennung nicht völlig falsch ist, sondern nur ungenau ist. Das OpenVMS-Betriebssystem verwendet .comals Erweiterung für "Befehls" -Dateien - ähnlich wie Shellskripts oder Batchdateien - und sie sind in der OpenVMS-Shell-Sprache DCL ( DIGITAL Command Language ) geschrieben.

Vielen Dank! Ich wusste nicht über Modelines. Und ja, ich erinnere mich vage an die .com-Erweiterung von DCL auf VMS in den 80ern. billynoah vor 10 Jahren 0
3
garyjohn

Wie Sie dies tun, ist im eingebauten Referenzhandbuch von Vim unter beschrieben

:help new-filetype 

Erstellen Sie wie in Abschnitt C.2. Beschrieben eine Datei ~/.vim/filetype.vimmit dem folgenden Inhalt:

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

.comDadurch wird jede Datei als Dateityp Apache erkannt. Wenn Sie nur mywebsite.comerkannt werden möchten, ändern Sie diese auZeile in

au! BufRead,BufNewFile mywebsite.com setfiletype apache