Proste rozwiązanie
Wpisz :setfiletype
(następnie spacją) , a następnie naciśnij Ctrl-d
.
Zobacz :help cmdline-completion
więcej na temat autouzupełniania w wierszu poleceń vima.
Skomplikowane rozwiązanie
To rozwiązanie wykorzystuje 'runtimepath'
opcję pobrania wszystkich dostępnych katalogów składni, a następnie pobiera listę plików vimscript w tych katalogach z usuniętymi rozszerzeniami. Może to nie być najbezpieczniejszy sposób, więc usprawnienia są mile widziane:
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
Następnie możesz użyć tej funkcji w dowolny sposób, na przykład drukując wszystkie wartości z listy. Możesz to zrobić w następujący sposób:
for f in GetFiletypes() | echo f | endfor
Zauważ, że prawdopodobnie można to dość mocno spakować, podobnie jest z czytelnością. Nie wyjaśnię wszystkich używanych tu funkcji i poleceń, ale oto wszystkie strony pomocy dla nich:
: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
(np.Tab
Po spacji). Nie jestem pewien, czy jest to pełna lista, ani jak przechwycić ją do jakiegoś bufora / pliku.