Solution simple
Tapez :setfiletype
(avec un espace après) , puis appuyez sur Ctrl-d
.
Voir :help cmdline-completion
pour plus d'informations sur l'auto-complétion dans la ligne de commande de vim.
Solution compliquée
Cette solution utilise l' 'runtimepath'
option permettant d'obtenir tous les répertoires de syntaxe disponibles, puis extrait une liste des fichiers vimscript de ces répertoires avec leurs extensions supprimées. Ce n'est peut-être pas le moyen le plus sûr de le faire, donc les améliorations sont les bienvenues:
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
Vous pouvez ensuite utiliser cette fonction comme vous le souhaitez, par exemple pour imprimer toutes les valeurs de la liste. Vous pouvez accomplir cela comme suit:
for f in GetFiletypes() | echo f | endfor
Notez que ceci peut probablement être un peu compacté, il en va de même pour la lisibilité. Je ne vous expliquerai pas toutes les fonctions et commandes utilisées ici, mais voici toutes les pages d'aide correspondantes:
: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
(c'est-à-direTab
après un espace). Vous ne savez pas si c'est la liste complète, ou comment la capturer dans un tampon / fichier.