Vim eklenti yöneticileri arasındaki fark nedir?


197

Vim için farklı paket yöneticilerine ve vim- plug'ı kullanmaya karar verdiğime bakıyordum fakat patojen ve vundle gibi başkalarını gördüm ve dürüst olmak gerekirse aradaki farkın ne olduğunu bilmiyorum.

Birisi bana farklılıklar hakkında kısa bir genel bakış verebilir, böylece hangisinin benim için en iyi olduğuna karar verebilirim?


Yanıtlar:


142

vim-plug , Vundle'a güzel bir alternatiftir, teknik açıdan biraz daha farklı olan ve daha hızlı yapması gereken şeyleri yapar (buna bakın ). Vundle'ın özelliklerinin çoğuna (ya da hepsine?) Sahiptir.

  • Herhangi biriyle Vim için Paralel güncelleme prosedürü +ruby, +pythonya Neovim. Hiçbiri yoksa Vimscript'i kullanarak sıralı moda geri döner.
  • Daha hızlı başlatma için tembel yükleme (buna bakın ).
  • Eklentileri yükleyin.
  • Eklentileri güncelle.
  • Güncelleştirmeleri gözden geçirme / geri alma.
  • OSX, Linux ve UNIX sistemlerini ve MS Windows'u destekler.
  • Güncelleme sonrası kancalar, örneğin YCM'yi otomatik olarak yeniden derleyin

Kullanmaya başlamak için:

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

Ve sizin vimcinizde:

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

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

O zaman emri ver

:PlugInstall

Listelenen eklentileri yüklemek için


1
Tavsiye için teşekkürler; Bundan önce yükleyicilere karşı koydum çünkü yük zamanlarımın zippisini seviyorum. Araştırmam gereken bariz olmayan şey, :PlugInstallyeni bir eklenti üzerindeydi; resmi dokümanlar bile bunu biraz gizliyor.
msn

7
Ben vim-fiş gibi süre, kafa karıştırıcı / size şaşırtıcı bulabileceğiniz bazı vim varsayılan değiştirir unutmayın github.com/junegunn/vim-plug/issues/379
laktak

Windows için, vim, vim 8.1 için vim81 gibi bir klasör vim sürüm numarasına sahiptir . Curl kullanırken ilk adımda klasörün olduğundan ..\vim81\autoload\..ve olmadığından emin olun ..\.vim\autoload\...
Stephen Jacob,

56

Patojen basittir. Temelde sadece yapar:

  • eklentileri bir klasörden otomatik yükle
  • bu eklentiler için yardım etiketleri oluştur

Artıları:

  • minimalist

Eksileri:

  • elle yapılan her şey (yükleme, güncelleme, kaldırma vb.)
  • tembel yükleme yok

Yüklemek için yüklemek pathogen.vimiçin ~/.vim/autoload:

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

Ve ekle .vimrc:

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

Eğer delirmek istemiyorsanız, sadece :Helptagsihtiyacınız olduğunda arayın .

Eklentiler daha sonra eklenir ~/vim/bundle.


20
Sadece açık olmak gerekirse, patojen bir eklenti yöneticisi değildir. Tek yaptığı runtimepath'i yönetmek. Bu kadar. ~ / .Vim / bundle'a eklediğiniz herhangi bir eklenti (yani varsayılan konum, bunu değiştirebilirsiniz), eklentinin dosyalarını vim'in runtimepath'ına ekleyerek erişilebilir olmasını sağlar. Çok fazla eklenti yüklü değilse, el ile yükleme, güncelleme, kaldırma gerçekten bir aleyhte değildir. Ek olarak, eklentileri güncellerken, değişikliklerin yalnızca bir alt kümesini getirmeyi seçebilir ve bir eklentinin en son sürümüne güncelleme yapamazsınız, bu da size çok fazla kontrol sağlar.
akshay

1
@AkshayHegde Evet, Vundle cevabını yazmaya başladığımda geri dönüp bu eklentiden "eklenti yöneticisi" ni düzenlemek zorunda kaldım. Con hakkında ikincil, bu yüzden başka bir şey yerine kullanmaya devam ediyorum.
muru

1
vim-pandemic Pathogen için güzel bir ektir. Eklentilerin arkasındaki uzak depoları idare eder ve runtimepath ile başa çıkmak için Pathogen'i bırakır. Bu, birinin iki araca ihtiyacı olduğu anlamına gelir, ancak "ayrı ayrı" yapılması gereken farklı işler için. En inandırıcı bulduğum Pathogen + Pandemic'in avantajı: demetler için git alt modülleriyle uğraşmanıza gerek yok.
jalanb

2
Eklenti yükleyicim olarak patojen kullanıyorum. Ancak bireysel eklentilerin sürümlerini kontrol etmek için git alt modüllerini kullanıyorum. Bu yüzden minimalist yaklaşımı benim kullanım durumum için iyi çalışıyor. Diğer yöneticiler sürüm oluşturma ve eklenti güncellemelerini nasıl ele alır?
Martin York

2
Ah @JaDogg, Bunun nereden README : "Normalde, Vim çalıştırmanızı bekler: belgelerle her dizinde helptags (örn: helptags ~ / .vim / doc).: Bunu yapar Helptags komut pathogen.vim ile Sağlanan bir olduğunu 'runtimepath'ınızdaki her dizinde. Eğer gerçekten çıldırmak istiyorsanız, vimrc'inizdeki Yardım Etiketlerini bile çağırabilirsiniz. Çıldırmaktan hoşlanmam. " Çok fazla eklentiniz varsa, bu başlatmayı biraz yavaşlatabilir. Ve gerçekten her başlangıçta çalıştırmanıza gerek kalmaz, her eklenti için bir kez kurulum / yükseltme yeterli olacaktır.
muru

43

Vundle daha karmaşıktır. Bir à la aptveya yumeklentiler için bir paket yöneticisidir . Yapabilir:

  • eklenti dizini ara
  • eklentileri güncelle
  • otomatik olarak yardım etiketleri oluştur
  • autoload klasöründeki eklentileri sakla ama kullan
  • kullanılmayan eklentileri temizle
  • Linux, OSX ve MS Windows üzerinde çalışır

Yüklemek:

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

Ve sonra eklemek .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

Bir eklenti yüklemek için aşağıdaki Pluginkomutu kullanın .vimrc(Github README hakkında daha fazla örnek):

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

Ve sonra (veya ) :PluginInstalldan arayın ..vimvim +PluginInstall +qall


Bağlandığınız NeoBundle README, projenin artık github.com/Shougo/dein.vim
Jonathan Hartley

@JonathanHartley "karanlık" güçlüsü olan? Sanırım bunun olacağını görmeliydim.
muru

13

dein.vim : Bu sorunun bir takipçisi olarak , buraya ünlü Shougo tarafından yapılan eklenti yöneticisini ekleyeceğim.

README'ye göre, eklenti aşağıdaki bağımlılıklara sahiptir:

  • Vim >7.4 or neovim: Vim'i güncel tutmak iyi bir şey olsa da, bazı kullanıcılar için önceki sürümlerin desteklenmemesi sorunlu olabilir.
  • git: bir paket yöneticisi için oldukça yaygın olan
  • rsync: git kadar yaygın değildir

Yazar NeoBundle'dan daha hızlı olduğunu iddia ediyor. Projenin benioku sayfasında bir kıyaslama bulunabilir .

Örneğin, böyle bir şey kullanamaz senin eklentileri güncellemek için: Bu eklenti yöneticisi biri orijinal kavramı herhangi komutları sağlamaz, ama sadece fonksiyonlar olmasıdır :PlugUpdatearamak gerekecek: :call dein#update(). Dürüst olmak gerekirse, bu tasarım seçiminin bir açıklamasını bulamadım.

Ayrıca, birisi bu "eksik" komutları sağlayan bir eklenti oluşturdu . Bunun iyi bir fikir olup olmadığı ya da eklenti yöneticisinin ana fikrine karşı olup olmadığı konusunda hiçbir fikrim yok, ancak yazar dokümanın SSS bölümünde bu konuya değiniyor.

Dein.vim, eklentileri Github'dan (vimscript.org'daki eklentilere kolay erişim ile) ve yerel dizinlerden almayı destekler.

Eklenti yöneticisi, eklentileri güncelleme ve devre dışı bırakma gibi bazı klasik özellikler sunar. Ayrıca, montaj zamanında kancaların çalıştırılmasını sağlar.

SSS’ye göre , kurduğu eklentilerin yardım etiketlerini elle oluşturmanız gerektiğine dikkat edin.

İlginç bir nokta, yazarın dein.vim'in test edilmesinin ve bakımının kolay olmasını istemesidir, böylece depo ayrıca bazı test komut dosyaları içerir.

Son olarak, bu eklenti yöneticisinin hafif ve hızlı olacak şekilde tasarlandığını söyleyebilirim, bu ilginç, ama örneğin vim-plug veya Vundle'dan daha az kullanıcı dostu olduğunu düşünüyorum .


Oh, ayrıca, Shougo dein.vim'i, herhangi biri ne anlama geldiğini bilirse, bu cevabı düzenlemekten çekinmeyin: "Karanlık güçle çalışan Vim / Neovim eklenti yöneticisi" olarak tanımlar.


1
"Karanlık güç", Shougo'nun vim eklentilerinde bulacağınız ve yalnızca NeoVim için olan bir cümledir.
Yonsy Solis,

8
Bence bu "Karanlık güç" ifadesi "Hafif Vim kullanıcıları" ndan geliyor - sadece varsayılan özellikleri kullananlar ve "Karanlık Vim kullanıcıları" - IDE olarak kullanmaya çalışanlar ya da en azından bir sürü eklenti kullananlar vimrc dosyalarına eklenen satırların listesi (Shougo'nun sunumunda burada daha fazla bilgi- slideshare.net/Shougo/lets-talk-about-neovim - 6. slayt)
lewiatan

1
@lewiatan: Teşekkürler, doğru cevabı bulduğunu düşünüyorum. (İlginç Shougo'nun sunumu btw)
statox

1
@statox Shougo şöyle diyor : "Dein.vim, komut kullanımını da işlev çağrıları lehine indirgiyor, bu da performansa katkıda bulunabilir (yine de emin değilim)."
Alexej Magura

1
@statox, Lulz, hiç kimse muhtemelen Shougo'nun sözleri değildir, o zaman onun blogu olmadığını farketmemiştim.
Alexej Magura

13

Hem Vim 8.0 hem de Neovim'in kendi paket yöneticisi vardır. Vim 8.0'da aşağıdaki dizinleri oluşturun:, kullanmak istediğiniz herhangi bir adın .vim/pack/*/startbulunduğu *yer; örn .vim/pack/jimmy/start.

Eklentinizi, tıpkı patojen kullanıyorsanız yaptığınız gibi başlangıç ​​dizinine kopyalayın.

Neovim ile, dizinler biraz daha uzun sürüyor:

.local/share/nvim/site/pack/*/start. Oradan Vim için aynı şeyi yapın.

Başka bir eklenti yöneticisi için hiç bir ihtiyaç yoktur.

Vim veya Neovim'de :h packagesbiraz daha ayrıntı için koşun . Renkler hakkındaki bölümü okuyun, çünkü farklı olsalar da, pek de farklı değiller. Dosyalarınızda .vimrcveya ek talimatlar eklemeniz gerekmez nvim/init.vim.

Umarım yardımcı olur.


8

Kendi kendine konuşlandırılması için özellikle VAM'ı seviyorum : tek ihtiyacınız olan şey sizin .vimrcvim'e başlamak.

Bu yüzden To Installdiğer birçok eklenti yöneticisinin kullandığı hatta ihtiyacınız yok (eklenti yöneticisinin kendisini kurmanın ilk adımı).


6

İlgilendiğim kadarıyla bağımlılıkları desteklemek için kullandığım eklenti yöneticisini istiyorum.

Sebepler birkaç eklentiyi sürdürmem ve çok fazla bağımlılığa sahip olmam: genel bir kütüphane herkes tarafından kullanılıyor, şablon / snippet motoru C ++ paketi tarafından kullanılıyor, yeniden düzenleme eklentisi de ctags kütüphane eklentisini kullanıyor , ve bunun gibi. Son kullanıcının ilgilendiği eklentileri yüklemek için 10 satıra kadar çalıştırma zorunluluğu bana iyi bir çözüm olarak görünmüyor.

Şimdiye kadar, sadece iki eklenti biliyorum: vim-addon-manager ve NeoBundle . VAM, vim resmi e-posta listesindeki birçok borsanın ardından veritabanı kodunu vim-pi'ye değiştirmiştir. Buradaki fikir, NeoBundle (ve bağımlılıkları yönetmekle ilgilenen herhangi bir eklentinin) en sonunda vim-pi'yi kullanabileceği idi.

Geçenlerde bağımlılıkları da idare eden vim-flavor'la karşılaştım . Konuyla, doğru olanı kurmak için eklenti sürümlerini kontrol eder.

Not: İlk cevabımdan beri

  • NeoBundle gelişimi durdu;
  • vim-pi vim.org'daki eklentilerden veritabanını düzenli olarak güncellerken ve VAM'in bağımlılıkları ifade etmek için hala kullanılabildiğinden, vim-pi veritabanına takma ad eklemek artık mümkün görünmüyor: MR / PR artık birleştirilmiyor

AFAIK, arka plan / paralel olarak bu eklenti klonlama / yükleme / güncelleme eklentilerini hiçbiri. Yeni bir vim ortamı kurmadığım veya ayda bir kez yüklediğim eklentileri güncellemediğim için, dürüst olmak gerekirse, umrumda değil. Tabii ki güncelleme 'helptags', bakım 'rtp've benzeri.


vim-plugREADME'nin "Grup bağımlılıkları" diyen bir örneği var. Bunu denedin mi, yoksa VAM / NeoBundle'un yöntemlerinden farklı mı?
muru

Vim-plug belgelerinde grup bağımlılıklarını kaçırdım. Ancak bağımlılıkları destekleme girişimlerini kod tabanından kaldırdıklarını gördüm. Grup bağımlılıkları konusunda, nasıl yardımcı olabileceğini anlamıyorum. Bağımlılıklar son kullanıcı tarafından bildirilmemelidir. Eklenti yazarları tarafından beyan edilmelidir. Lh-cpp eklentisi ile bakarsanız ve yakından bakarsanız, bağımlılıkların doğrusal bir şey olmadığını göreceksiniz. Sorunlardan kaçınmak için asiklik olması gereken odaklı bir grafik.
Luc Hermitte

Şimdiye kadar, on yıldan fazla bir süredir VAM kullanıyorum ve bundan memnunum. Yine de, eklentilerimi test etmek için travisten entegre etmek çok daha kolay olduğu için vim-flavor kullandım. Ve ne yazık ki, her ikisi de bağımlılıkları bildirmek için farklı bir sözdizimi kullanıyor.
Luc Hermitte

1
Bilginize: NeoBundle'un gelişimi durdu (23 Şubat 2016'dan beri). Bunun yerine halefi Dein.vim'i (aynı yazar tarafından) önerir .
Peter V. Mørch

3

Bu eklenti yöneticilerinin çoğu, eklentileri yönetme konusunda harika bir iş çıkarsa vimrcda sizi yönetme baş ağrısını bırakıyor . Birden fazla makineniz varsa ve aynı yapılandırmayı istiyorsanız, Vire bunu çok kolaylaştırır. Git ya da alt modülleri çözmeniz ya da kurulum ya da geçiş yapmanız için fazladan çaba sarfetmeniz gerekmez.

  • Çoğu modern Vim eklentisinin yazıldığı ve gerekli olduğu Python'u yükleyin.
  • pip install vire
  • vimrcVarlığınızı Github'a bir yumruk olarak gönderin ve orada saklayın
  • Windows kullanıyorsanız, vire -ien son Vim'i yüklemek için (veya Neovim with -i -n)
  • Var olan herhangi bir eklenti işlevi çağrısını kaldırın ve herhangi bir eklentiyi kurmak için yorumlanmış çağrıları tanımlayın " Plug 'tpope/vim-unimpaired'
  • vire gistID

Ardından veya eklentilerinizin güncellenmesini vireistediğinizde vimrcveya uygulamayı güncellemek için istediğiniz zaman çalıştırın -i.

Vire, Vim / Neovim'in packeklentileri yükleme özelliğini kullanıyor. Ayrıca, mevcut eklenti yöneticinizi kullanmaya devam edebilirsiniz, ancak Vire'yi yalnızca Vim, the vimrcve eklenti yöneticisinin kendisini tercih ederseniz kurmak için kullanabilirsiniz .


1

Pathogen kullanarak bir eklenti yöneticisi isteyen kişiler için apt-vim de var. curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (Burada açıklandığı gibi kurabilirsiniz : https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Kurulduktan sonra apt-vim install, Ubuntu apt paket yöneticisine benzer bir şekilde paket deposunun adını yazıp yazabilirsiniz .


1
Bu aslında sadece bağlantı cevaptır. Apt-vim'in nasıl kurulacağı ve kullanılacağı hakkında biraz daha detaylı bilgi edinebilirseniz, kabul edilebilir olur.
Tumbler41

Güncelledim. Gerçekten Pathogen hakkındaki yazı hakkında bir yorum olması gerektiğini düşündüm, ancak yorum yapmak için yeterli
Melanie Day

1
Eklenti için bağlantı eksik. Ayrıca yine öneren bir eklenti curl URL |sh. Asla kimseye internetten rastgele bir kod çalıştırmasını önermem. Gerçekten bu kötü bir güvenlik alışkanlığı.
Christian Brabandt

0

pathogenKolayca kullanmanın, güncellemenin ve taşınabilir hale getirmenin bir yolunu arıyordum , bu nedenle belki de bir bashkomut dosyası yardımcı olabilir ( vim-plugişlevsellik kullanarak ) -

#!/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

Ve sonra bir örnek .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
Buna biraz detay ekleyebilir misin? OP'nin ana sorusu “Biri bana [paket yöneticilerindeki] farklılıklar hakkında kısa bir genel bakış verebilir, bu yüzden hangisinin benim için en iyi olduğuna karar verebilirim?” Şeklindedir. Gönderiminiz buna nasıl cevap veriyor? Özellikle sahip olmadığı patojene ne ekliyorsunuz? Bu tarz bir şey.
B Katmanı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.