Basit bir çözüm
Tip :setfiletype
(sonradan boşlukla) , ardından Ctrl-d
.
:help cmdline-completion
Vim'in komut satırında otomatik tamamlama hakkında daha fazla bilgi için bkz .
Karmaşık Çözüm
Bu çözüm kullanılabilir 'runtimepath'
tüm sözdizimi dizinlerini almak için bu seçeneği kullanır ve ardından uzantıları kaldırılmış olarak bu dizinlerdeki vimscript dosyalarının bir listesini getirir. Bu, bunu yapmanın en güvenli yolu olmayabilir, bu yüzden iyileştirmeler memnuniyetle karşılanır:
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
Ardından bu işlevi listedeki tüm değerlerin yazdırılması gibi istediğiniz şekilde kullanabilirsiniz. Öyle başarabilirsin:
for f in GetFiletypes() | echo f | endfor
Bunun muhtemelen biraz sıkıştırılabileceğine dikkat edin, okunabilirlik için tam da böyle. Burada kullanılan her işlevi ve komutu açıklamayacağım, ancak işte onlar için yardım sayfalarının tümü:
: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
(örnTab
. Bir boşluktan sonra). Listenin tam olup olmadığından veya bir arabellek / dosyaya nasıl alınacağından emin değil.