Einfache Lösung
Geben Sie :setfiletype
(mit einem Leerzeichen danach) ein und drücken Sie dann Ctrl-d
.
Sehen Sie :help cmdline-completion
für weitere Informationen über die automatische Vervollständigung in der Befehlszeile des vim.
Komplizierte Lösung
Diese Lösung verwendet die 'runtimepath'
Option, um alle verfügbaren Syntaxverzeichnisse abzurufen, und ruft dann eine Liste der Vimscript-Dateien in diesen Verzeichnissen ab, deren Erweiterungen entfernt wurden. Dies ist möglicherweise nicht die sicherste Methode, daher sind Verbesserungen willkommen:
function! GetFiletypes()
" Get a list of all the runtime directories by taking the value of that
" option and splitting it using a comma as the separator.
let rtps = split(&runtimepath, ",")
" This will be the list of filetypes that the function returns
let filetypes = []
" Loop through each individual item in the list of runtime paths
for rtp in rtps
let syntax_dir = rtp . "/syntax"
" Check to see if there is a syntax directory in this runtimepath.
if (isdirectory(syntax_dir))
" Loop through each vimscript file in the syntax directory
for syntax_file in split(glob(syntax_dir . "/*.vim"), "\n")
" Add this file to the filetypes list with its everything
" except its name removed.
call add(filetypes, fnamemodify(syntax_file, ":t:r"))
endfor
endif
endfor
" This removes any duplicates and returns the resulting list.
" NOTE: This might not be the best way to do this, suggestions are welcome.
return uniq(sort(filetypes))
endfunction
Sie können diese Funktion dann wie gewünscht verwenden, z. B. um alle Werte in der Liste auszudrucken. Das könnten Sie so machen:
for f in GetFiletypes() | echo f | endfor
Beachten Sie, dass dies wahrscheinlich ziemlich stark komprimiert werden kann. Dies dient nur der Lesbarkeit. Ich werde nicht alle hier verwendeten Funktionen und Befehle erklären, aber hier sind alle Hilfeseiten für sie:
:help 'runtimepath'
:help :let
:help :let-&
:help split()
:help :for
:help expr-.
:help :if
:help isdirectory()
:help glob()
:help fnamemodify()
:help add()
:help uniq()
:help sort()
:setfiletype
(dh mitTab
nach einem Leerzeichen). Ich bin mir nicht sicher, ob es sich um die vollständige Liste handelt oder wie ich sie in einem Puffer / einer Datei erfassen soll.