ฉันจะทราบได้อย่างไรว่าปลั๊กอินชนิดไฟล์ (เช่นvim-latexsuite
) ได้รับการติดตั้งและเปิดใช้งานเมื่อฉันเปิดไฟล์ที่เหมาะสมหรือไม่ เครื่องมือแก้ไขยอดนิยมอื่นจะระบุว่า "โหมดรอง" ที่เกี่ยวข้องทำงานอยู่ สิ่งที่เป็นกลุ่มเทียบเท่า
ฉันจะทราบได้อย่างไรว่าปลั๊กอินชนิดไฟล์ (เช่นvim-latexsuite
) ได้รับการติดตั้งและเปิดใช้งานเมื่อฉันเปิดไฟล์ที่เหมาะสมหรือไม่ เครื่องมือแก้ไขยอดนิยมอื่นจะระบุว่า "โหมดรอง" ที่เกี่ยวข้องทำงานอยู่ สิ่งที่เป็นกลุ่มเทียบเท่า
คำตอบ:
ฉันจะทราบได้อย่างไรว่ามีการติดตั้งปลั๊กอินประเภทไฟล์ (เช่น vim-latexsuite) หรือไม่
คุณสามารถใช้:scriptnames
รายการไฟล์ที่มาทั้งหมด
อีกทางเลือกหนึ่งคือการตรวจสอบตัวแปรที่ระบุว่าโหลดปลั๊กอินดังกล่าวrecommended practice to allow the user to disable the loading of a given plugin.
หรือไม่ โดยปกติคุณสามารถค้นหาg:loaded_...
ตัวแปรภายใน<plugin_name>/plugin
โฟลเดอร์ สำหรับปลั๊กอินที่คุณกล่าวถึงecho exists("loaded_libList")
คุณสามารถใช้
และเปิดใช้งานเมื่อฉันเปิดไฟล์ที่เหมาะสม?
หากเป็นปลั๊กอินประเภทไฟล์ควรเปิดใช้งานโดยอัตโนมัติเมื่อ'filetype'
ตั้งค่าตัวเลือก คุณสามารถตรวจสอบว่าตัวเลือกนั้นถูกต้องสำหรับบัฟเฟอร์ปัจจุบันหรือไม่:
:set filetype?
เครื่องมือแก้ไขยอดนิยมอื่นจะระบุว่า "โหมดรอง" ที่เกี่ยวข้องทำงานอยู่ สิ่งที่เป็นกลุ่มเทียบเท่า
คุณสามารถปรับแต่ง statusline ของคุณเพื่อแสดงข้อบ่งชี้ทั้งการใช้ปลั๊กอินหรือโดยตรงผ่านตัวเลือกตามที่อธิบายใน:help 'statusline'
และvi-improved.org
ปลั๊กอินที่เป็นกลุ่มไม่ได้มาพร้อมกับตัวบ่งชี้การเปิดใช้งานและในการตั้งค่าที่เหมาะสมสิ่งนี้ไม่จำเป็น
คุณสามารถตรวจสอบได้อย่างรวดเร็วว่าปลั๊กอินมีการใช้งานอยู่หรือไม่โดยการสอบถามผลข้างเคียงหรือไม่ ดังนั้นสำหรับตัวอย่างเช่นผมรู้ว่าแมป NERDCommenter เริ่มต้นด้วยดังนั้นแบบสอบถามสำหรับการเปิดใช้งานของมันจะเป็น<Leader>c
:nmap <Leader>c
หากการแม็พแสดงรายการปลั๊กอินจะแอ็คทีฟ สามารถทำได้เช่นเดียวกันสำหรับคำสั่งที่กำหนดเองและ:autocmd
ในกลุ่มของปลั๊กอิน ปลั๊กอินส่วนใหญ่ยังกำหนดตัวแปรการรวมการป้องกันg:loaded_pluginname
ที่สามารถตรวจสอบได้
เช่นเดียวกับปลั๊กอินประเภทไฟล์ (และเอฟเฟกต์ทั้งหมดควรเป็นแบบกำหนดขอบเขตบัฟเฟอร์) ปัจจัยที่สำคัญที่สุดในการพิจารณาปลั๊กอินที่ใช้งานอยู่คือการตรวจสอบประเภทไฟล์ที่ถูกต้อง คุณสามารถสืบค้นผ่าน:setlocal filetype?
หรือแม้กระทั่งใส่ลงในของคุณ'statusline'
ผ่านทาง%y
/ %Y
รายการ
ในกรณีนั้นฉันจะเล่นด้วย:scriptnames
เท่านั้น เราไม่สามารถคาดหวังที่จะใช้ทั่วโลกตัวแปรที่จะตรวจสอบว่ามีฟุตปลั๊กอินได้รับการโหลด - LaTeXSuite อาจมีปลั๊กอินผมจำไม่ได้คืออะไรบางอย่างที่เป็นมีสคริปต์ ftplugin มากมาย ftplugins จำนวนมากใช้b:did_ftplugin
(ที่จัดส่งมาพร้อมกับ Vim เป็นอย่างน้อย) แต่วิธีการนี้ไม่ได้ปรับขนาดอย่างแน่นอนดังนั้น ftplugins ทั้งหมดไม่ใช้ตัวแปรที่ไม่มีจุดหมายนี้และเราไม่สามารถตรวจสอบชื่อตัวแปรทั่วไปเพื่อทราบว่า ftplugin นั้นมีหรือไม่ ถูกโหลด - ตัวอย่างเช่นสำหรับ C เพียงอย่างเดียวฉันมี 22 ftplugins แน่นอนว่าพวกเขาไม่ได้ใช้ anti-reinclusion ยามเดียวกัน
:scriptname
ดังนั้น อนิจจา:scriptname
ให้ผลที่ไม่ได้สั่งมากสำหรับสายตามนุษย์ของเรา โชคดีexecute()
(ฟังก์ชั่นล่าสุด) และfilter()
มาช่วยเหลือ ในกรณีนี้ฉันจะมองหาสคริปต์ที่เกี่ยวข้องกับน้ำยางข้นด้วย
:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"')
" or even "latex" instead of "tex"
นอกจากนี้หากคุณใช้ตัวจัดการปลั๊กอินอาจเป็นไปได้ว่าตัวจัดการปลั๊กอินกำลังใช้'runtimepath'
ตัวเลือก :echo &rtp
คุณสามารถแสดงความคุ้มค่าด้วย คุณสามารถกรองค่าด้วย:
:echo filter(split(&rtp), ','), 'v:val =~? "tex")
(สิ่งนี้จะบอกคุณว่าตัวจัดการปลั๊กอินของคุณเปิดใช้งานปลั๊กอิน LaTeX-suite ในกรณีของคุณหรือไม่ซึ่งจะไม่บอกคุณว่า ftplugins ที่เกี่ยวข้องนั้นโหลดอย่างถูกต้องหรือไม่:scriptname
จะให้ข้อมูลนี้แก่คุณ)
หากคุณเปิดใช้งานปลั๊กอินชนิดไฟล์โดยใช้คำสั่งอัตโนมัติคุณสามารถตั้งค่า verbose = 9 เพื่อให้ Vim echo คำสั่งอัตโนมัติดังกล่าวเป็นตัวเรียกใช้งาน:
:set verbose=9
วิธีหนึ่งคือทำการค้นหา regex ในruntimepath
:
if match(&runtimepath, 'MY-PLUGIN') != -1
" ...
endif
หากคุณใช้vim-plug ต่อไปนี้เป็นวิธีการทั่วไปในการตรวจสอบ:
function! PlugLoaded(name)
return (
\ has_key(g:plugs, a:name) &&
\ isdirectory(g:plugs[a:name].dir) &&
\ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction
การใช้งาน:
if PlugLoaded('MY-PLUGIN')
" ...
endif
หากคุณใช้vim-plugมันจะตั้งค่าตัวแปรที่เรียกว่าplugs
ซึ่งแสดงรายการปลั๊กอินที่คุณโหลดทั้งหมดและข้อมูลบางอย่างเกี่ยวกับพวกเขา ฉันแก้ไขคำถามของคุณด้วยตัวเองเมื่อฉันต้องการตรวจสอบว่าฉันใช้ YCM หรือ coc.nvim หรือไม่ คุณสามารถดูว่ามีการโหลดปลั๊กอินโดยการเรียกใช้has_key(plugs, "name")
หรือไม่ตัวอย่างเช่น
if has_key(plugs, 'YouCompleteMe')
call YCM()
endif
if has_key(plugs, "coc.nvim")
call CocStart()
endif
หมายเหตุ: สิ่งนี้จะแสดงเฉพาะในกรณีที่มีการระบุไว้ในปัจจุบันของคุณvimrc
และไม่เช่นหากคุณตั้งให้โหลดแบบขี้เกียจ
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
...
if has_key(plugs, 'nerdtree')
echo "HAS NERDTREE"
endif
จะยังคงพิมพ์สิ่งนั้นเมื่อเริ่มต้นแม้ว่าจะnerdtree
ยังไม่ได้โหลดก็ตาม