Giải pháp đơn giản
Nhập :setfiletype
(với một khoảng trắng sau đó) , sau đó nhấn Ctrl-d
.
Xem :help cmdline-completion
để biết thêm về tự động hoàn thành trong dòng lệnh của vim.
Giải pháp phức tạp
Giải pháp này sử dụng 'runtimepath'
tùy chọn để nhận tất cả các thư mục cú pháp có sẵn, sau đó tìm nạp danh sách các tệp vimscript trong các thư mục đó với phần mở rộng của chúng bị xóa. Đây có thể không phải là cách an toàn nhất để làm điều đó, vì vậy những cải tiến được hoan nghênh:
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
Sau đó, bạn có thể sử dụng chức năng này theo bất kỳ cách nào bạn muốn, chẳng hạn như in tất cả các giá trị trong danh sách. Bạn có thể thực hiện điều đó như vậy:
for f in GetFiletypes() | echo f | endfor
Lưu ý rằng điều này có thể có thể được nén khá nhiều, nó giống như thế này để dễ đọc. Tôi sẽ không giải thích mọi chức năng và lệnh được sử dụng ở đây, nhưng đây là tất cả các trang trợ giúp cho chúng:
: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
(nghĩa làTab
sau một khoảng trắng). Không chắc chắn nếu đó là danh sách đầy đủ, hoặc làm thế nào để ghi nó vào một số bộ đệm / tập tin.