Wie kann ich vim mitteilen, dass einige Dateierweiterungen auch vorhanden sind?

21

Ich bearbeite C ++ - Code in .cppDateien, während Vorlagencode in .tccDateien abgelegt wird. Wenn ich eine solche Datei öffne, ist keine Syntaxhervorhebung verfügbar. Ich habe es set syntax=cppin einer tpp.vimDatei versucht ~/.vim/ftplugin/, aber es macht nichts, während es im Editor funktioniert. Gibt es eine Möglichkeit, bestimmte Erweiterungen als gleichbedeutend mit anderen zu behandeln?

Seestern
quelle

Antworten:

19

Der bevorzugte Ansatz ist ~/.vim/filetype.vim, wie :help 43.2in Vim FAQ 26.8 erwähnt und erläutert, Folgendes zu erstellen :

Eine bessere Alternative zum obigen Ansatz ist das Erstellen einer Datei mit dem Dateityp .vim im Verzeichnis ~ / .vim (oder in einem der in der Option 'runtimepath' angegebenen Verzeichnisse) und das Hinzufügen der folgenden Zeilen:

" my filetype file
if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufRead,BufNewFile *.x       setfiletype c
augroup END

Bearbeiten:

Das did_load_filetypessollte dir keine Probleme bereiten; Es würde nur einen Neustart von Vim erfordern, nachdem es geändert wurde.

Dies ist erforderlich, um ein mehrfaches und unnötiges Laden dieser Datei zu vermeiden. Sie wird von der Basisdatei ($ VIMRUNTIME / filetype.vim) geerbt:

" Vim support file to detect file types
"
" Maintainer:   Bram Moolenaar <[email protected]>
" 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

Weitere Informationen finden Sie unter :help new-filetype.

mMontu
quelle
Warum die ifAussage? Wenn ich es drin lasse, werden die AutocMDS nicht für mich ausgeführt.
Oarfish
@oarfish auch wenn du Vim neu startest?
Montag,
Ok, das ist komisch. Ich muss au!Aussagen in der Gruppe machen, au! BufRead,BufNewFile *.py setfiletype pythonund zwar in der Zeile darunter au! BufRead,BufNewFile *.tpp setfiletype cpp. Aber nur der zweite funktioniert tatsächlich. Durch das Bearbeiten von .pyDateien wird der Dateityp nicht auf festgelegt python. Ich bin nicht gerade ein Vim-Guru, also vermisse ich wahrscheinlich etwas.
Oarfish
@oarfish Wenn Sie die Datei überprüfen, die ich bei der Bearbeitung erwähnt habe, werden Sie feststellen, dass sie bereits eine Zeile mit enthält au BufNewFile,BufRead *.py,*.pyw setf python, sodass Ihre erste Zeile irrelevant ist. Dein Problem ist wahrscheinlich woanders.
MMontu
"Editing .py files does not set the file type to python"- Was ist die Ausgabe :set ftin diesem Fall? Wenn es sich nicht um Python handelt,
befolgen Sie die Anweisungen
14

Sie könnten (in Ihrem globalen .vimrc) tun :

autocmd BufEnter *.tpp :setlocal filetype=cpp
edi9999
quelle
autocmd BufEnter *.cuf :setlocal filetype=fortranCUDA Fortran Dateien als Fortran
Khaverim
1

Man könnte auch haben: au BufRead,BufNewFile *.tpp setlocal filetype=cppin ihnen , .vimrcso dass eine Datei mit beim Öffnen .tppErweiterung, Dateityp für eingestellt ist C ++

Tallamjr
quelle
1
Dies scheint im Wesentlichen mit der Antwort von @ edi9999 identisch zu sein. Können Sie erläutern, warum BufRead,BufNewFileanstelle von BufEnter?
Oarfish
@oarfish Es spielt keine Rolle , zu viel denke ich, aber ich ziehe es BufRead,BufNewFilevor , BufEnterweil in der Dokumentation ( :help BufEnter) heißt es: „BufEnter: .... auch dann ausgeführt , wenn zu bearbeiten einen Puffer, beginnend nach . den BufReadPost automatischen Befehlen“ wo BufReadPost ist ein Synonym für BufRead . Außerdem glaube ich nicht, dass das :vorher erforderlich ist, setlocaldeshalb habe ich das auch in meiner Antwort weggelassen. (Ich hätte dies möglicherweise völlig falsch interpretiert, freue mich über weitere Diskussionen)
Tallamjr