Apa perbedaan antara pengelola plugin vim?


197

Saya telah melihat berbagai paket manajer untuk vim dan yang saya putuskan untuk menggunakan vim-plug tetapi saya telah melihat yang lain menyukai patogen dan vundle dan saya jujur ​​tidak tahu apa bedanya.

Bisakah seseorang memberi saya gambaran singkat tentang perbedaan sehingga saya dapat memutuskan mana yang paling cocok untuk saya?


Jawaban:


142

vim-plug adalah alternatif yang bagus untuk Vundle, ia melakukan hal-hal yang sedikit berbeda dari sudut pandang teknis yang seharusnya membuatnya lebih cepat ( lihat ini ). Ini memiliki sebagian besar (atau semua?) Fitur Vundle.

  • Prosedur pembaruan paralel untuk Vim dengan salah +ruby, +pythonatau Neovim. Turun kembali ke mode berurutan menggunakan Vimscript jika tidak ada yang tersedia.
  • Pemuatan malas, untuk memulai lebih cepat ( lihat ini ).
  • Pasang pengaya.
  • Perbarui plugin.
  • Tinjau / kembalikan pembaruan.
  • Mendukung sistem OSX, Linux & UNIX, dan MS Windows.
  • Kait pasca-pembaruan, mis., Secara otomatis mengkompilasi ulang YCM

Untuk mulai menggunakannya:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Dan di vimrc Anda:

call plug#begin()
Plug 'tpope/vim-sensible'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
call plug#end()

Lalu berikan perintah

:PlugInstall

untuk menginstal plugin yang terdaftar.


1
Terima kasih untuk rekomendasinya; Saya sudah menolak loader sebelum ini karena saya suka loadtime saya zippy. Satu hal yang tidak jelas yang harus saya teliti adalah :PlugInstallpada sebuah plugin baru; bahkan dokumen resmi sedikit mengaburkan ini.
msw

7
sementara saya suka vim-plug, perlu diketahui bahwa itu mengubah beberapa vim default yang mungkin Anda temukan mengejutkan / membingungkan github.com/junegunn/vim-plug/issues/379
laktak

Untuk Windows, vim memiliki nomor versi folder vim , seperti vim81 untuk vim 8.1. Pada langkah pertama saat menggunakan curl pastikan folder itu ..\vim81\autoload\..dan tidak ..\.vim\autoload\...
Stephen Jacob

56

Patogen itu sederhana. Pada dasarnya itu hanya:

  • muat otomatis plugin dari folder
  • buat tag bantuan untuk plugin ini

Pro:

  • minimalis

Cons:

  • semuanya dilakukan secara manual (menginstal, memperbarui, menghapus, dll.)
  • tidak ada pemuatan malas

Untuk menginstalnya unduh pathogen.vimke ~/.vim/autoload:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Dan tambahkan ke .vimrc:

call pathogen#infect()
call pathogen#helptags() "If you like to get crazy :)

Jika Anda tidak suka menjadi gila, teleponlah hanya :Helptagsjika perlu.

Plugin kemudian ditambahkan ke ~/vim/bundle.


20
Untuk lebih jelasnya, patogen bukanlah pengelola plugin. Yang dilakukannya hanyalah mengelola runtimepath. Itu dia. Setiap plugin yang Anda tambahkan ke ~ / .vim / bundle (yaitu lokasi default, Anda dapat mengubahnya), ia menambahkan file plugin ke vim's runtimepath sehingga mereka dapat diakses. Menginstal, memperbarui, menghapus secara manual tidak benar-benar menipu jika Anda tidak memiliki banyak plugin yang diinstal. Selain itu, saat memperbarui plugin, Anda dapat memilih untuk mengambil hanya sebagian dari perubahan, dan tidak memperbarui ke versi terbaru dari plugin, yang memberi Anda banyak kontrol.
akshay

1
@AkshayHegde Ya, begitu saya mulai menulis jawaban Vundle saya harus kembali dan mengedit "plugin manager" dari jawaban ini. Diperbanyak tentang tipuan, itu sebabnya saya terus menggunakannya alih-alih yang lainnya.
muru

1
pandemi vim adalah tambahan yang bagus untuk Patogen. Ini menangani repositori jarak jauh di belakang plugin, meninggalkan Pathogen untuk menangani runtimepath. Ini berarti seseorang membutuhkan dua alat, tetapi untuk tugas yang berbeda yang "harus" ditangani secara terpisah. Keuntungan dari Pathogen + Pandemic yang saya temukan paling meyakinkan: tidak perlu berurusan dengan sub-modul git untuk bundel.
jalanb

2
Saya menggunakan patogen sebagai loader plugin saya. Tapi saya menggunakan git submodules untuk mengontrol versi dari masing-masing plugin. Jadi pendekatan minimalisnya berfungsi dengan baik untuk use case saya. Bagaimana manajer lain menangani pembaruan versi dan plugin.
Martin York

2
@JaDogg Oh, itu dari README : "Biasanya, Vim mengharapkan Anda untuk menjalankan: helptag pada setiap direktori dengan dokumentasi (misalnya: helptags ~ / .vim / doc). Diberikan dengan pathogen.vim adalah: perintah Helptags yang melakukan ini pada setiap direktori di 'runtimepath' Anda. Jika Anda benar-benar ingin menjadi gila, Anda bahkan bisa memanggil Helptag di vimrc Anda. Saya tidak suka menjadi gila. " Saya akan mengatakan jika Anda memiliki banyak plugin, ini mungkin memperlambat startup sedikit. Dan Anda benar-benar tidak perlu menjalankannya di setiap startup, sekali untuk setiap instalasi / peningkatan plugin sudah cukup.
muru

43

Vundle lebih kompleks. Ini adalah manajer paket à la aptatau yumuntuk plugin. Bisa:

  • cari indeks plugin
  • perbarui plugin
  • menghasilkan tag bantuan secara otomatis
  • simpan, tetapi tidak digunakan, plugin di folder pengisian otomatis
  • bersihkan plugin yang tidak digunakan tersebut
  • Bekerja di Linux, OSX, dan MS Windows

Untuk memasang:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Dan kemudian tambahkan ke .vimrc:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" more Plugin commands
" ...
call vundle#end()            " required
filetype plugin indent on    " required

Untuk menginstal plugin, gunakan Pluginperintah dalam .vimrc(lebih banyak contoh di Github README):

" plugin on Github
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'

Dan kemudian telepon :PluginInstalldari .vim(atau vim +PluginInstall +qall).


README NeoBundle yang telah Anda tautkan mengatakan bahwa proyek ini sekarang sudah tidak digunakan lagi oleh github.com/Shougo/dein.vim
Jonathan Hartley

@JonathanHartley yang bertenaga "gelap"? Saya kira saya seharusnya melihat itu datang.
muru

13

dein.vim : Sebagai tindak lanjut dari pertanyaan ini , saya akan menambahkan di sini pengelola plugin yang dibuat oleh Shougo yang terkenal.

Menurut README, plugin memiliki dependensi berikut:

  • Vim >7.4 or neovim: sementara menjaga agar Vim tetap mutakhir adalah hal yang baik, mungkin bermasalah bagi beberapa pengguna yang versi sebelumnya tidak didukung
  • git: yang sangat umum untuk manajer paket
  • rsync: yang tidak biasa seperti git

Penulis mengklaim bahwa ini lebih cepat dari NeoBundle. Patokan dapat ditemukan di halaman readme proyek .

Salah satu konsep asli dari manajer plugin ini adalah bahwa hal itu tidak memberikan perintah apapun, tapi hanya fungsi: misalnya, untuk memperbarui plugin Anda Anda tidak dapat menggunakan sesuatu seperti :PlugUpdate, Anda harus menghubungi: :call dein#update(). Sejujurnya saya belum menemukan penjelasan tentang pilihan desain ini.

Juga, seseorang membuat sebuah plugin yang menyediakan perintah "hilang" ini. Saya tidak tahu apakah ini ide yang bagus atau apakah ini bertentangan dengan ide utama pengelola plugin tetapi penulis menyebutkannya di FAQ file doc.

Dein.vim mendukung mendapatkan plugin dari Github (dengan akses yang difasilitasi ke plugin dari vimscript.org) dan dari direktori lokal.

Pengelola plugin menyediakan beberapa fitur klasik seperti memperbarui dan menonaktifkan plugin. Ini juga memungkinkan pelaksanaan kait pada saat instalasi.

Perhatikan bahwa menurut FAQ, Anda harus membuat helptag secara manual dari plugins yang dipasangnya.

Hal yang menarik adalah bahwa penulis ingin agar dein.vim mudah untuk diuji dan dipelihara sehingga repositori juga mengandung beberapa skrip pengujian.

Akhirnya, saya akan mengatakan bahwa manajer plugin ini tampaknya dirancang untuk menjadi ringan dan cepat, yang menarik, tetapi saya pikir itu kurang ramah pengguna daripada vim-plug atau Vundle , misalnya.


Oh, juga, Shougo menggambarkan dein.vim sebagai "pengelola plugin Vim / Neovim bertenaga gelap" jika ada yang tahu apa artinya, silakan mengedit jawaban ini: Saya ingin tahu ;-)


1
"Dark powered" adalah frasa yang akan Anda temukan di plugin vim Shougo yang memiliki dukungan / atau hanya untuk NeoVim.
Yonsy Solis

8
Saya pikir kalimat "Bertenaga gelap" berasal dari "Pengguna Light Vim" - mereka yang hanya menggunakan fitur default dan "Pengguna Dark Vim" - mereka yang mencoba menggunakannya sebagai IDE atau setidaknya menggunakan banyak plugin dan memiliki banyak baris ditambahkan ke file vimrc mereka (lebih lanjut tentang ini di sini di presentasi Shougo- slideshare.net/Shougo/lets-talk-about-neovim - slide 6)
lewiatan

1
@lewiatan: Terima kasih, saya pikir Anda mendapatkan jawaban yang benar. (Presentasi Shougo yang menarik, btw)
statox

1
@statox Shougo menyatakan : "Dein.vim juga membuang penggunaan perintah demi pemanggilan fungsi, yang mungkin juga berkontribusi pada kinerja (saya tidak yakin, meskipun)."
Alexej Magura

1
@statox, Lulz, tidak mungkin itu bukan kata-kata Shougo, kalau begitu, aku tidak menyadari bahwa itu bukan blognya.
Alexej Magura

13

Baik Vim 8.0 dan Neovim memiliki pengelola paket bawaan sendiri. Di Vim 8.0 buat direktori berikut:, di .vim/pack/*/startmana *ada nama yang ingin Anda gunakan; mis .vim/pack/jimmy/start.

Kloning plugin Anda ke direktori mulai seperti yang Anda lakukan jika Anda menggunakan patogen.

Dengan Neovim, direktori sedikit lebih panjang:

.local/share/nvim/site/pack/*/start. Dari sana lakukan hal yang sama seperti untuk Vim.

Tidak perlu sama sekali untuk pengelola plugin lain.

Dalam Vim atau Neovim, jalankan :h packagesuntuk sedikit lebih detail. Baca bagian tentang warna karena mereka berbeda, walaupun tidak banyak. Anda tidak memerlukan instruksi tambahan dalam file .vimrcAnda atau Anda nvim/init.vim.

Semoga itu bisa membantu.


8

Saya terutama menyukai VAM untuk penyebarannya sendiri: yang Anda butuhkan hanyalah milik Anda .vimrcdan kemudian mulai vim.

Jadi Anda tidak perlu To Installbaris yang digunakan oleh sebagian besar pengelola-plugin lainnya (langkah pertama memasang pengelola plugin itu sendiri).


6

Sejauh yang saya ketahui, saya ingin pengelola plugin yang saya gunakan untuk mendukung dependensi.

Alasannya adalah karena saya memelihara beberapa plugin dan saya memiliki banyak inter-dependensi: perpustakaan umum digunakan oleh semua, template / snippet engine digunakan oleh C ++ suite, plugin refactoring menggunakan juga ctags library-plugin , dan seterusnya. Membutuhkan pengguna akhir untuk menjalankan hingga 10 baris untuk menginstal plugin yang mereka minati tampaknya bagi saya bukan solusi yang baik.

Sejauh ini, saya hanya tahu dua plugin seperti itu: vim-addon-manager , dan NeoBundle . VAM telah memalsukan kode database-nya ke vim-pi setelah banyak pertukaran di milis vim resmi. Idenya adalah bahwa NeoBundle (dan plugin lain yang tertarik untuk mengelola dependensi) akhirnya dapat mengeksploitasi vim-pi.

Saya baru saja menemukan vim-flavour yang juga menangani dependensi. Pada subjek itu memeriksa versi plugin untuk menginstal yang benar.

Catatan: Sejak jawaban awal saya,

  • Pengembangan NeoBundle telah berhenti;
  • dan sementara vim-pi memperbarui databasenya secara teratur dari plugins di vim.org, dan bahwa VAM masih dapat digunakan untuk mengekspresikan dependensi, tampaknya tidak mungkin lagi untuk menambahkan alias ke database vim-pi: MR / PR tidak digabungkan lagi

AFAIK, tidak ada plugin ini yang mengkloning / menginstal / memperbarui plugin di latar belakang / paralel. Karena saya tidak menginstal lingkungan vim baru, atau memperbarui plugin yang saya instal sebulan sekali, jujur, saya tidak peduli. Mereka tentu saja memperbarui 'helptags', merawat 'rtp', dan sebagainya.


vim-plugREADME memiliki contoh yang mengatakan "Ketergantungan grup". Sudahkah Anda mencobanya, atau berbeda dengan metode VAM / NeoBundle?
muru

Saya telah melewatkan dependensi grup dalam dokumentasi vim-plug. Saya memang melihat bahwa mereka telah menghapus upaya mereka untuk mendukung dependensi dari basis kode. Mengenai dependensi grup, saya tidak melihat bagaimana ini dapat membantu. Dependensi tidak boleh dideklarasikan oleh pengguna akhir. Mereka harus dideklarasikan oleh penulis plugin. Jika Anda melihat dengan plugin lh-cpp dan melihat lebih dekat Anda akan melihat dependensi bukan sesuatu yang linear. Ini adalah grafik berorientasi, yang harus asiklik untuk menghindari masalah.
Luc Hermitte

Sejauh ini, saya telah menggunakan VAM selama lebih dari satu dekade dan saya senang menggunakannya. Namun, saya telah menggunakan vim-flavor karena jauh lebih mudah untuk diintegrasikan dari travis - untuk menguji plugin saya. Dan sayangnya, keduanya menggunakan sintaks yang berbeda untuk mendeklarasikan dependensi.
Luc Hermitte

1
FYI: Pengembangan NeoBundle telah berhenti (sejak 23 Feb 2016). Ini merekomendasikan penggantinya Dein.vim (oleh penulis yang sama) sebagai gantinya.
Peter V. Mørch

3

Sebagian besar pengelola plugin ini melakukan pekerjaan yang baik dalam mengelola plugin tetapi tidak perlu repot-repot mengaturnya vimrcuntuk Anda. Jika Anda memiliki banyak mesin dan menginginkan konfigurasi yang sama, Vire membuatnya sangat mudah. Anda tidak perlu git atau mencari tahu submodul atau upaya ekstra apa pun untuk mendapatkan pengaturan atau migrasi.

  • Instal Python, yang merupakan plugins Vim paling modern ditulis dan diperlukan pula
  • pip install vire
  • Poskan yang ada vimrcke Github sebagai inti dan pertahankan di sana
  • Jika pada Windows, vire -iuntuk menginstal Vim terbaru atau (Neovim dengan -i -n)
  • Hapus panggilan fungsi plugin apa pun yang ada dan tentukan panggilan yang dikomentari untuk menginstal plugin apa pun " Plug 'tpope/vim-unimpaired'
  • vire gistID

Kemudian jalankan virekapan saja Anda ingin vimrcatau plugin Anda diperbarui atau dengan -imemperbarui aplikasi juga.

Vire memanfaatkan fitur Vim / Neovim packuntuk memuat plugin. Anda juga dapat terus menggunakan pengelola plugin yang ada, tetapi gunakan Vire hanya untuk menginstal Vim, the vimrc, dan pengelola plugin itu sendiri jika diinginkan.


1

Untuk orang yang menginginkan pengelola plugin lengkap menggunakan Pathogen, ada juga apt-vim. Anda dapat menginstalnya dengan curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (seperti dijelaskan di sini: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vi-vim-editor-part-ii ). Setelah diinstal, Anda bisa mengetik apt-vim installdiikuti dengan nama repositori paket, mirip dengan manajer paket apt Ubuntu.


1
Ini pada dasarnya adalah jawaban tautan saja. Jika Anda bisa masuk ke sedikit lebih detail tentang cara menginstal dan menggunakan apt-vim, itu akan diterima.
Tumbler41

Saya memperbaruinya. Sungguh saya pikir itu harus menjadi komentar di posting tentang Patogen, tapi saya tidak punya cukup poin untuk berkomentar
Melanie Day

1
Tautan hilang ke plugin. Juga lagi sebuah plugin yang menyarankan curl URL |sh. Saya tidak akan menyarankan siapa pun untuk menjalankan beberapa kode acak dari Internet. Sungguh itu adalah kebiasaan keamanan yang buruk.
Christian Brabandt

0

Saya mencari cara untuk menggunakan pathogentetapi memutakhirkannya dengan mudah dan membuatnya portabel, jadi mungkin sebuah bashskrip mungkin membantu (menggunakan vim-plugfungsi) -

#!/bin/sh

# inspired by https://github.com/thoughtbot/dotfiles/blob/master/hooks/post-up

if [ ! -e "$HOME"/.vim/autoload/pathogen.vim ]; then
  curl -fLo "$HOME"/.vim/autoload/pathogen.vim --create-dirs \
      https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
fi

if [ -e "$HOME"/.vim/autoload/plug.vim ]; then
  vim -E -s +PlugUpgrade +qa
else
  curl -fLo "$HOME"/.vim/autoload/plug.vim --create-dirs \
      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
fi
vim -u "$HOME"/.vimrc.bundles +PlugUpdate +PlugClean! +qa

Dan kemudian sebuah contoh .vimrc.bundle-

"installed via the Githubs
call plug#begin('~/.vim/bundle')
Plug 'bling/vim-airline'
Plug 'scrooloose/syntastic'
Plug 'scrooloose/nerdtree'
Plug 'tpope/vim-fireplace'
Plug 'vim-scripts/paredit.vim'
" etc

call plug#end()

"disable vim-plug sugar-- actual config should be set via .vimrc
filetype plugin indent off 
syntax on

1
Bisakah Anda menambahkan beberapa detail ke ini? Pertanyaan utama yang diajukan OP adalah "Bisakah seseorang memberi saya gambaran singkat tentang perbedaan [dalam paket manajer] sehingga saya dapat memutuskan mana yang terbaik untuk saya"? Bagaimana kiriman Anda membantu menjawabnya? Apa yang Anda tambahkan ke patogen secara spesifik yang tidak dimilikinya? Hal semacam itu.
B Layer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.