Cara memuat plugin dengan persyaratan

14

Saya sedang mencari jawaban untuk ini, tetapi belum menemukan apa pun, jadi jika saya melewatkan sesuatu yang jelas, saya minta maaf. Saya pikir ini akan menjadi pencarian google cepat, jadi mungkin ini lebih rumit dari yang saya kira.

Saya ingin dapat memuat plugin dengan syarat berdasarkan jenis file yang saya edit. Sebagai contoh, ketika mengedit python, saya tidak ingin keybindings yang vim-sexpmenginstal, tetapi ketika bekerja pada clojure, saya ingin plugin itu dimuat.

Saat ini saya menggunakan neovim dan patogen, tetapi jika ada manajer plugin berbeda yang melakukan ini untuk saya, saya akan terbuka untuk beralih. Juga, jika ini ada, apakah :set syntax whateverberalih plugin? Karena itu akan menjadi super :)

Terima kasih sebelumnya atas bantuan / arahan!

Hoopes
sumber
1
Anda mengajukan pertanyaan, tetapi sebenarnya Anda mendeskripsikan pertanyaan lain: jika plugin memasang global keybindings, nonaktifkan (baca plugin plugin tentang cara melakukannya), dan aktifkan kembali secara lokal (menggunakan autocmds misalnya) hanya untuk tipe file yang Anda ingin. Jika plugin ini ditulis dengan baik, Anda tidak mendapatkan terlalu banyak dengan menunda inisialisasi. Tetapi jika Anda tidak menonaktifkan ikatan kunci global yang tidak diinginkan yang diaktifkan oleh sebuah plugin, mereka akan tetap memengaruhi Anda setelah plugin dimuat.
VanLaser

Jawaban:

18

Anda dapat melakukan ini dengan Vim-Plug. Lihat README :

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

Saya pikir Anda harus menggunakan :set filetype whateveralih-alih set syntax whatevermengaktifkan plugin.

(Beberapa pengelola plugin lain memungkinkan Anda melakukan itu, lihat Apa perbedaan antara pengelola plugin vim? )

statox
sumber
8

Alih-alih menelepon execute pathogen#infect()untuk memuat semua plugin, panggil pathogen#interposesetiap plugin, yaitu:

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

API patogen tidak didokumentasikan di luar sumber , tetapi cukup sederhana (meskipun nama fungsinya tidak jelas dan tidak deskriptif). Anda juga dapat menggunakan pathogen#surround()jalur absolut.

Anda dapat memuat plugin dengan persyaratan dasar autocmd:

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

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

Jika Anda menemukan banyak dari kasus ini, Anda bahkan dapat membaginya menjadi jalur yang berbeda:

  • ~/.vim/bundle/always untuk plugin yang selalu Anda inginkan
  • ~/.vim/bundle/<filetype> untuk plugin untuk tipe file tertentu
  • Dan kemudian memuatnya seperti ini:

    " 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
    

Dengan cara ini Anda tidak perlu menambahkan sejumlah autocmds untuk setiap jenis file / plugin.

jika ini ada, apakah :set syntax whateverberalih plugin? Karena itu akan menjadi super :)

  • Setelah sebuah plugin dimuat, itu dimuat. Sebuah "Plugin" hanyalah sebuah koleksi function, commanddan mapdefinitons. Saya tidak tahu cara mudah untuk "membongkar 'ini.

  • Ini tidak plugin beban untuk filetype IFF Anda gunakan :set filetype; Secara umum, Anda selalu ingin menggunakan :set filetypedan tidak :set syntax , karena syntaxhanya akan mengatur sintaks, dan tidak lekukan dan pengaturan lainnya (misalnya iskeyword, formatexpr, dll).

Martin Tournoij
sumber