Простое решение
Введите :setfiletype
(с пробелом после) , затем нажмите Ctrl-d
.
Смотрите :help cmdline-completion
подробнее об автозаполнении в командной строке vim.
Сложное решение
Это решение использует 'runtimepath'
параметр для получения всех доступных каталогов синтаксиса, а затем извлекает список файлов vimscript в этих каталогах с удаленными их расширениями. Это может быть не самый безопасный способ сделать это, поэтому улучшения приветствуются:
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
Затем вы можете использовать эту функцию любым удобным для вас способом, например, распечатать все значения в списке. Вы можете сделать это так:
for f in GetFiletypes() | echo f | endfor
Обратите внимание, что это, вероятно, может быть сжато немного, это так же для удобства чтения. Я не буду объяснять каждую функцию и команду, используемые здесь, но вот все справочные страницы для них:
: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
(например,Tab
после пробела). Не уверен, что это полный список или как записать его в какой-нибудь буфер / файл.