วิธีโหลดปลั๊กอินตามเงื่อนไข


14

ฉันกำลังค้นหาคำตอบสำหรับสิ่งนี้ แต่ยังไม่พบอะไรเลยดังนั้นหากฉันพลาดอะไรบางอย่างที่ชัดเจนฉันขอโทษ ฉันคิดว่ามันจะเป็นการค้นหา google อย่างรวดเร็วดังนั้นอาจซับซ้อนกว่าที่ฉันคิด

ฉันต้องการโหลดปลั๊กอินตามเงื่อนไขตามประเภทของไฟล์ที่ฉันกำลังแก้ไข ตัวอย่างเช่นเมื่อแก้ไข python ฉันไม่ต้องการ keybindings ที่vim-sexpติดตั้ง แต่เมื่อทำงานกับ clojure ฉันต้องการให้โหลดปลั๊กอินนั้น

ฉันกำลังใช้ neovim และ pathogen อยู่ แต่ถ้ามีตัวจัดการปลั๊กอินอื่นที่ทำสิ่งนี้ให้ฉันฉันจะเปิดเพื่อสลับ นอกจากนี้หากมีอยู่จะ:set syntax whateverสลับปลั๊กอินหรือไม่ เพราะนั่นจะเป็นซุปเปอร์ :)

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ / ทิศทาง!


1
คุณกำลังถามคำถาม แต่จริง ๆ แล้วคุณอธิบายอีกอันหนึ่ง: หากปลั๊กอินติดตั้ง keybindings ทั่วโลกปิดการใช้งานพวกเขา (อ่านเอกสารปลั๊กอินเกี่ยวกับวิธีการทำ) และเปิดใช้งานพวกเขาอีกครั้งในพื้นที่ (โดยใช้ autocmds เป็นต้น) สำหรับไฟล์ ต้องการ. หากปลั๊กอินเขียนได้ดีคุณจะไม่ได้รับมากเกินไปโดยการชะลอการเริ่มต้น แต่ถ้าคุณไม่ปิดใช้งานการเชื่อมโยงคีย์โกลบอลที่ไม่ต้องการที่เปิดใช้งานโดยปลั๊กอินพวกเขาจะยังคงส่งผลกระทบต่อคุณหลังจากที่โหลดปลั๊กอินแล้ว
VanLaser

คำตอบ:


18

คุณสามารถทำได้ด้วย Vim-Plug ดูREADME :

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

ฉันคิดว่าคุณจะต้องใช้:set filetype whateverแทนset syntax whateverการเปิดใช้งานปลั๊กอิน

(ตัวจัดการปลั๊กอินตัวอื่นอาจอนุญาตให้คุณทำเช่นนั้นดูความแตกต่างระหว่างตัวจัดการปลั๊กอินกลุ่มคืออะไร )


8

แทนที่จะเรียกexecute pathogen#infect()ให้โหลดปลั๊กอินทั้งหมดให้โทรpathogen#interposeหาทุกปลั๊กอินเช่น:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

API ของเชื้อโรคนั้นไม่ได้รับการบันทึกไว้ภายนอกแหล่งข้อมูลแต่ก็ง่ายพอ (แม้ว่าชื่อฟังก์ชั่นจะคลุมเครือและไม่ได้อธิบาย) นอกจากนี้คุณยังสามารถใช้pathogen#surround()สำหรับเส้นทางที่แน่นอน

คุณสามารถโหลดปลั๊กอินตามเงื่อนไขด้วยพื้นฐานautocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

หากคุณพบว่าคุณมีกรณีเหล่านี้มากมายคุณสามารถแยกมันออกเป็นเส้นทางอื่นได้:

  • ~/.vim/bundle/always สำหรับปลั๊กอินที่คุณต้องการ
  • ~/.vim/bundle/<filetype> สำหรับปลั๊กอินสำหรับประเภทไฟล์เฉพาะ
  • แล้วโหลดเหมือน:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

วิธีนี้คุณไม่จำเป็นต้องเพิ่มทั้งautocmds สำหรับทุกประเภทไฟล์ / ปลั๊กอิน

หากมีอยู่จะ:set syntax whateverเปลี่ยนปลั๊กอินหรือไม่? เพราะนั่นจะเป็นซุปเปอร์ :)

  • เมื่อโหลดปลั๊กอินแล้วจะมีการโหลด A "ปลั๊กอิน" เป็นเพียงคอลเลกชันfunction, commandและmapdefinitons ฉันไม่รู้วิธีที่ตรงไปตรงมาเพื่อ "ยกเลิกการโหลด" สิ่งนี้

  • มันไม่ปลั๊กอินโหลด filetype IFF คุณใช้:set filetype; โดยทั่วไปแล้วคุณมักจะต้องการที่จะใช้:set filetypeและไม่ได้ :set syntaxเป็นsyntaxจะตั้งเฉพาะการเน้นไวยากรณ์และไม่เยื้องและการตั้งค่าอื่น ๆ (เช่นiskeyword, formatexprฯลฯ )

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