Solución simple
Escriba :setfiletype
(con un espacio después) , luego presione Ctrl-d
.
Vea :help cmdline-completion
para más información sobre autocompletado en la línea de comando de vim.
Solución complicada
Esta solución utiliza la 'runtimepath'
opción para obtener todos los directorios de sintaxis disponibles y luego obtiene una lista de los archivos vimscript en esos directorios con sus extensiones eliminadas. Esta puede no ser la forma más segura de hacerlo, por lo que las mejoras son bienvenidas:
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
Luego puede usar esta función de la forma que desee, como imprimir todos los valores de la lista. Podrías lograr eso así:
for f in GetFiletypes() | echo f | endfor
Tenga en cuenta que esto probablemente se puede compactar un poco, es así para facilitar la lectura. No explicaré todas las funciones y comandos utilizados aquí, pero aquí están todas las páginas de ayuda para ellos:
: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
(es decir,Tab
después de un espacio). No estoy seguro si es la lista completa o cómo capturarla en algún búfer / archivo.