Solusi Sederhana
Ketik :setfiletype
(dengan spasi sesudahnya) , lalu tekan Ctrl-d
.
Lihat :help cmdline-completion
lebih lanjut tentang pelengkapan otomatis di baris perintah vim.
Solusi Rumit
Solusi ini menggunakan 'runtimepath'
opsi untuk mendapatkan semua direktori sintaks yang tersedia, dan kemudian mengambil daftar file vimscript di direktori tersebut dengan ekstensi mereka dihapus. Ini mungkin bukan cara paling aman untuk melakukannya, jadi perbaikan dipersilahkan:
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
Anda kemudian dapat menggunakan fungsi ini dengan cara apa pun yang Anda inginkan, seperti mencetak semua nilai dalam daftar. Anda bisa mencapai itu seperti ini:
for f in GetFiletypes() | echo f | endfor
Perhatikan bahwa ini mungkin bisa dipadatkan sedikit, hanya saja ini agar mudah dibaca. Saya tidak akan menjelaskan setiap fungsi dan perintah yang digunakan di sini, tetapi di sini ada semua halaman bantuan untuk mereka:
: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
(yaitu denganTab
setelah spasi). Tidak yakin apakah ini daftar lengkap, atau bagaimana cara menangkapnya ke beberapa buffer / file.