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?

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 <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

Weitere Informationen finden Sie unter :help new-filetype.


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

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 ++


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.