วิธีดูว่าปลั๊กอินใช้งานอยู่หรือไม่


15

ฉันจะทราบได้อย่างไรว่าปลั๊กอินชนิดไฟล์ (เช่นvim-latexsuite) ได้รับการติดตั้งและเปิดใช้งานเมื่อฉันเปิดไฟล์ที่เหมาะสมหรือไม่ เครื่องมือแก้ไขยอดนิยมอื่นจะระบุว่า "โหมดรอง" ที่เกี่ยวข้องทำงานอยู่ สิ่งที่เป็นกลุ่มเทียบเท่า

คำตอบ:


20

ฉันจะทราบได้อย่างไรว่ามีการติดตั้งปลั๊กอินประเภทไฟล์ (เช่น 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


6

ปลั๊กอินที่เป็นกลุ่มไม่ได้มาพร้อมกับตัวบ่งชี้การเปิดใช้งานและในการตั้งค่าที่เหมาะสมสิ่งนี้ไม่จำเป็น

คุณสามารถตรวจสอบได้อย่างรวดเร็วว่าปลั๊กอินมีการใช้งานอยู่หรือไม่โดยการสอบถามผลข้างเคียงหรือไม่ ดังนั้นสำหรับตัวอย่างเช่นผมรู้ว่าแมป NERDCommenter เริ่มต้นด้วยดังนั้นแบบสอบถามสำหรับการเปิดใช้งานของมันจะเป็น<Leader>c :nmap <Leader>cหากการแม็พแสดงรายการปลั๊กอินจะแอ็คทีฟ สามารถทำได้เช่นเดียวกันสำหรับคำสั่งที่กำหนดเองและ:autocmdในกลุ่มของปลั๊กอิน ปลั๊กอินส่วนใหญ่ยังกำหนดตัวแปรการรวมการป้องกันg:loaded_pluginnameที่สามารถตรวจสอบได้

เช่นเดียวกับปลั๊กอินประเภทไฟล์ (และเอฟเฟกต์ทั้งหมดควรเป็นแบบกำหนดขอบเขตบัฟเฟอร์) ปัจจัยที่สำคัญที่สุดในการพิจารณาปลั๊กอินที่ใช้งานอยู่คือการตรวจสอบประเภทไฟล์ที่ถูกต้อง คุณสามารถสืบค้นผ่าน:setlocal filetype?หรือแม้กระทั่งใส่ลงในของคุณ'statusline'ผ่านทาง%y/ %Yรายการ


6

ในกรณีนั้นฉันจะเล่นด้วย: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จะให้ข้อมูลนี้แก่คุณ)


3

หากคุณเปิดใช้งานปลั๊กอินชนิดไฟล์โดยใช้คำสั่งอัตโนมัติคุณสามารถตั้งค่า verbose = 9 เพื่อให้ Vim echo คำสั่งอัตโนมัติดังกล่าวเป็นตัวเรียกใช้งาน:

:set verbose=9

3

วิธีหนึ่งคือทำการค้นหา 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

มันไม่พอ. นอกจากนี้จะดูแลเฉพาะปลั๊กอินที่ติดตั้งกับตัวจัดการปลั๊กอิน ในทุกกรณีจะไม่ดูแลสคริปต์ ftplugin ที่จัดส่งภายในปลั๊กอินซึ่งเป็นคำถามของ OP
Luc Hermitte

0

หากคุณใช้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ยังไม่ได้โหลดก็ตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.