Soluzione semplice
Digitare :setfiletype
(con uno spazio dopo) , quindi premere Ctrl-d
.
Per :help cmdline-completion
ulteriori informazioni sul completamento automatico, consultare la riga di comando di vim.
Soluzione complicata
Questa soluzione utilizza l' 'runtimepath'
opzione per ottenere tutte le directory di sintassi disponibili, quindi recupera un elenco dei file vimscript in quelle directory con le loro estensioni rimosse. Questo potrebbe non essere il modo più sicuro per farlo, quindi i miglioramenti sono i benvenuti:
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
È quindi possibile utilizzare questa funzione nel modo desiderato, ad esempio stampando tutti i valori nell'elenco. Potresti farlo in questo modo:
for f in GetFiletypes() | echo f | endfor
Si noti che probabilmente questo può essere compattato un po ', è proprio così per leggibilità. Non spiegherò tutte le funzioni e i comandi utilizzati qui, ma qui ci sono tutte le pagine di aiuto per loro:
: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
(ovvero conTab
dopo uno spazio). Non sono sicuro se si tratta dell'elenco completo o di come acquisirlo in un buffer / file.