ทางออกที่ง่าย
พิมพ์:setfiletype
(มีพื้นที่หลังจากนั้น)Ctrl-d
จากนั้นกดปุ่ม
ดู:help cmdline-completion
ข้อมูลเพิ่มเติมเกี่ยวกับการเติมข้อความอัตโนมัติในบรรทัดคำสั่งของ vim
โซลูชั่นที่ซับซ้อน
วิธีการแก้ปัญหานี้ใช้'runtimepath'
ตัวเลือกในการรับไดเรกทอรีไวยากรณ์ที่มีอยู่ทั้งหมดแล้วดึงรายชื่อของไฟล์ vimscript ในไดเรกทอรีเหล่านั้นที่มีนามสกุลออก นี่อาจไม่ใช่วิธีที่ปลอดภัยที่สุดในการดำเนินการดังนั้นเรายินดีรับการปรับปรุง:
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
จากนั้นคุณสามารถใช้ฟังก์ชั่นนี้ในแบบที่คุณต้องการเช่นการพิมพ์ค่าทั้งหมดในรายการ คุณสามารถทำเช่นนั้นได้:
for f in GetFiletypes() | echo f | endfor
โปรดทราบว่านี่อาจจะอัดแน่นได้เล็กน้อยมันเป็นแบบนี้เพื่อความสะดวกในการอ่าน ฉันจะไม่อธิบายทุกฟังก์ชั่นและคำสั่งที่ใช้ที่นี่ แต่นี่คือหน้าช่วยเหลือทั้งหมดสำหรับพวกเขา:
: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
(เช่นด้วยTab
หลังจากช่องว่าง) ไม่แน่ใจว่าเป็นรายการที่สมบูรณ์หรือวิธีจับภาพไปยังบัฟเฟอร์ / ไฟล์