ฉันเพิ่งค้นพบเกี่ยวกับ:colorscheme
คำสั่ง มีวิธีที่ฉันสามารถรับรายการชุดรูปแบบสีที่ถูกต้องจาก Vim หรือไม่? ฉันต้องการที่จะสามารถทำเช่นนี้จากภายในเป็นกลุ่มไม่ใช่จากรายการบางแห่งบนอินเทอร์เน็ต
ฉันเพิ่งค้นพบเกี่ยวกับ:colorscheme
คำสั่ง มีวิธีที่ฉันสามารถรับรายการชุดรูปแบบสีที่ถูกต้องจาก Vim หรือไม่? ฉันต้องการที่จะสามารถทำเช่นนี้จากภายในเป็นกลุ่มไม่ใช่จากรายการบางแห่งบนอินเทอร์เน็ต
คำตอบ:
วิธีที่ง่ายที่สุดคือการใช้งานหลังจากที่:help c_Ctrl-d
:colorscheme
ดังนั้น:colorscheme
Ctrl-dจะเอาท์พุทชุดสีที่คุณมีให้คุณ
set wildmenu
วิธีที่จะแสดงรายการก็คือโดย ด้วยวิธีนี้หลังจากที่:colorscheme
+ space
+ tab
รายการเสร็จจะปรากฏขึ้นและยังสามารถเลือกได้ด้วยปุ่มลูกศรหรือและCtrl-N
Ctrl-P
สิ่งนี้ไม่เพียงทำงานบน colorscheme แต่ยังรวมถึง cmdline ที่สมบูรณ์ด้วย ลักษณะการทำงานได้รับผลกระทบจากwildmode
และตั้งค่าเป็นค่าเริ่มต้นfull
ดีขึ้น
หากคุณต้องการทำสิ่งนี้ใน Vimscript คุณสามารถรับรายการชุดสีโดยใช้ฟังก์ชัน getcompletion ():
let c = getcompletion('', 'color')
echo c
นี่เป็นวิธีที่ค่อนข้างง่ายกว่าคำตอบ Vimscript ที่มีอยู่ซึ่งสแกนระบบไฟล์
ดู:help getcompletion()
รายละเอียดเพิ่มเติมได้ที่
คำตอบอื่น ๆ แสดงวิธีการโต้ตอบของการแสดงชุดสีที่มีให้ แต่ไม่มีใครพูดถึงวิธีการรับรายการที่สามารถใช้ใน vimscript นี่คือการปรับคำตอบของฉันสำหรับคำถามนี้
วิธีการแก้ปัญหานี้ใช้'runtimepath'
ตัวเลือกในการรับไดเรกทอรี colorcheme ที่มีอยู่ทั้งหมดแล้วดึงรายชื่อไฟล์ vimscript ในไดเรกทอรีเหล่านั้นโดยลบส่วนขยายออก นี่อาจไม่ใช่วิธีที่ปลอดภัยที่สุดในการดำเนินการดังนั้นเรายินดีต้อนรับการปรับปรุง:
function! GetColorschemes()
" 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 colorschemes that the function returns
let colorschemes = []
" Loop through each individual item in the list of runtime paths
for rtp in rtps
let colors_dir = rtp . "/colors"
" Check to see if there is a colorscheme directory in this runtimepath.
if (isdirectory(colors_dir))
" Loop through each vimscript file in the colorscheme directory
for color_scheme in split(glob(colors_dir . "/*.vim"), "\n")
" Add this file to the colorscheme list with its everything
" except its name removed.
call add(colorschemes, fnamemodify(color_scheme, ":t:r"))
endfor
endif
endfor
" This removes any duplicates and returns the resulting list.
return uniq(sort(colorschemes))
endfunction
จากนั้นคุณสามารถใช้รายการที่ส่งคืนโดยฟังก์ชันนี้ใน vimscript ตัวอย่างเช่นคุณสามารถสะท้อนแต่ละ colorcheme:
for c in GetColorschemes() | echo c | 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()