Solução Simples
Digite :setfiletype
(com um espaço depois) e pressione Ctrl-d
.
Veja :help cmdline-completion
para mais informações sobre o preenchimento automático na linha de comando do vim.
Solução complicada
Esta solução usa a 'runtimepath'
opção de obter todos os diretórios de sintaxe disponíveis e, em seguida, busca uma lista dos arquivos vimscript nesses diretórios com suas extensões removidas. Esta pode não ser a maneira mais segura de fazê-lo, portanto, as melhorias são bem-vindas:
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
Você pode usar esta função da maneira que desejar, como imprimir todos os valores da lista. Você poderia fazer isso assim:
for f in GetFiletypes() | echo f | endfor
Observe que isso provavelmente pode ser compactado um pouco, é assim para facilitar a leitura. Não explicarei todas as funções e comandos usados aqui, mas aqui estão todas as páginas de ajuda para eles:
: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
(ou seja,Tab
após um espaço). Não tenho certeza se é a lista completa ou como capturá-la em algum buffer / arquivo.