Jaka jest różnica między menedżerami wtyczek vim?


197

Patrzyłem na różnych menedżerów pakietów dla vima i tego, który zdecydowałem się użyć vim-plug, ale widziałem innych takich jak patogen i vundle i szczerze mówiąc, nie wiem, jaka jest różnica.

Czy ktoś może dać mi krótki przegląd różnic, abym mógł zdecydować, który z nich będzie dla mnie najlepszy?


Odpowiedzi:


142

vim-plug jest fajną alternatywą dla Vundle, robi coś nieco innego z technicznego punktu widzenia, co powinno przyspieszyć ( zobacz to ). Ma większość (czy wszystkie?) Funkcji Vundle.

  • Równoległe procedura aktualizacji dla VIM z dowolnym +ruby, +pythonlub Neovim. Wraca do trybu sekwencyjnego za pomocą Vimscript, jeśli żaden nie jest dostępny.
  • Leniwe ładowanie, dla szybszego uruchamiania ( zobacz to ).
  • Zainstaluj wtyczki.
  • Zaktualizuj wtyczki.
  • Przejrzyj / wycofaj aktualizacje.
  • Obsługuje systemy OSX, Linux i UNIX oraz MS Windows.
  • Haki po aktualizacji np. Automatycznie rekompilują YCM

Aby rozpocząć korzystanie:

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

I w twoim vimrc:

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

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

Następnie wydaj polecenie

:PlugInstall

aby zainstalować wymienione wtyczki.


1
Dzięki za rekomendację; Wcześniej opierałem się programom ładującym, ponieważ lubię moje czasy ładowania. Jedyną nieoczywistą rzeczą, którą musiałem zbadać, była :PlugInstallnowa wtyczka; nawet oficjalne dokumenty nieco to zaciemniają.
msw

7
podczas gdy lubię wtyczkę vima, pamiętaj, że zmienia ona niektóre domyślne ustawienia vima, co może być zaskakujące / mylące github.com/junegunn/vim-plug/issues/379
laktak 12.12.16

W systemie Windows vim ma numer wersji folderu vim , taki jak vim81 dla vim 8.1. W pierwszym kroku podczas korzystania z curl upewnij się, że folder jest, ..\vim81\autoload\..a nie ..\.vim\autoload\...
Stephen Jacob

56

Patogen jest prosty. Zasadniczo po prostu:

  • automatyczne ładowanie wtyczek z folderu
  • generuj tagi pomocy dla tych wtyczek

Plusy:

  • minimalistyczny

Cons:

  • wszystko inne wykonywane ręcznie (instalacja, aktualizacja, usuwanie itp.)
  • brak leniwego ładowania

Aby zainstalować go ściągnąć pathogen.vimdo ~/.vim/autoload:

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

I dodaj do .vimrc:

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

Jeśli nie lubisz wariować, dzwoń tylko :Helptagswtedy, gdy jest to konieczne.

Wtyczki są następnie dodawane do ~/vim/bundle.


20
Mówiąc wprost, patogen nie jest menedżerem wtyczek. Wszystko, co robi, to zarządzać ścieżką runtimepath. Otóż ​​to. Wszelkie wtyczki dodane do ~ / .vim / bundle (tj. Domyślna lokalizacja, możesz to zmienić), dodaje pliki wtyczki do ścieżki uruchomieniowej vima, aby były dostępne. Ręczne instalowanie, aktualizowanie, usuwanie nie jest naprawdę oszustwem, jeśli nie masz zainstalowanych tylu wtyczek. Ponadto podczas aktualizowania wtyczek możesz pobrać tylko część zmian, a nie aktualizować do najnowszej wersji wtyczki, która daje dużą kontrolę.
akshay

1
@AkshayHegde Tak, kiedy zacząłem pisać odpowiedź Vundle, musiałem wrócić i edytować „menedżera wtyczek” z tej odpowiedzi. Opierając się na oszustwie, dlatego nadal go używam zamiast czegokolwiek innego.
muru

1
vim-pandemic to miły dodatek do Pathogen. Obsługuje zdalne repozytoria za wtyczkami, pozostawiając Pathogen do obsługi ścieżki runtimepath. Oznacza to, że potrzebne są dwa narzędzia, ale do różnych zadań, które „powinny” być obsługiwane osobno. Zaleta Pathogen + Pandemic, którą uznałem za najbardziej przekonującą: nie trzeba zajmować się podmodułami git dla pakietów.
jalanb

2
Używam patogenu jako mojego modułu ładującego wtyczki. Ale używam podmodułów git do kontrolowania wersji poszczególnych wtyczek. Więc jego minimalistyczne podejście działa dobrze w moim przypadku użycia. Jak inni menedżerowie radzą sobie z aktualizacją wersji i aktualizacjami wtyczek.
Martin York

2
@JaDogg Och, to pochodzi z README : „Normalnie Vim oczekuje, że uruchomisz: helptags w każdym katalogu z dokumentacją (np .: helptags ~ / .vim / doc). Dostarczone z pathogen.vim to polecenie: Helptags, które to robi w każdym katalogu na swojej „ścieżce runtimepath”. Jeśli naprawdę chcesz się zwariować, możesz nawet przywołać Helptagi w swoim vimrc. Nie lubię wariować. ” Powiedziałbym, że jeśli masz dużo wtyczek, może to nieco spowolnić uruchamianie. I naprawdę nie musisz go uruchamiać przy każdym uruchomieniu, wystarczy raz dla każdej instalacji / aktualizacji wtyczki.
muru

43

Vundle jest bardziej złożony. Jest to menedżer pakietów à la aptlub yumwtyczek. To może:

  • przeszukaj indeks wtyczek
  • zaktualizuj wtyczki
  • automatycznie generuje helptagi
  • przechowuj, ale nie używaj wtyczek w folderze autoload
  • wyczyść takie nieużywane wtyczki
  • Działa w systemach Linux, OSX i MS Windows

Żeby zainstalować:

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

A następnie dodaj do .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

Aby zainstalować wtyczkę, użyj Pluginpolecenia w .vimrc(więcej przykładów na Github README):

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

A następnie zadzwoń :PluginInstallz .vim(lub vim +PluginInstall +qall).


README, do którego masz link, mówi, że projekt jest już nieaktualny na korzyść github.com/Shougo/dein.vim
Jonathan Hartley

@JonathanHartley to „ciemny” zasilany? Chyba powinienem był to przewidzieć.
muru

13

dein.vim : W odpowiedzi na to pytanie dodam tutaj menedżera wtyczek stworzonego przez znanego Shougo.

Według README wtyczka ma następujące zależności:

  • Vim >7.4 or neovim: chociaż aktualizowanie Vima jest dobrą rzeczą, dla niektórych użytkowników może być problematyczne, że poprzednie wersje nie są obsługiwane
  • git: co jest dość powszechne w menedżerze pakietów
  • rsync: co nie jest tak powszechne jak git

Autor twierdzi, że jest szybszy niż NeoBundle. Benchmark można znaleźć na stronie Readme projektu .

Jedna oryginalna koncepcja tego menadżera wtyczek jest to, że nie przewiduje żadnych poleceń, ale tylko funkcje: na przykład, aby aktualizować swoje wtyczki nie można użyć czegoś podobnego :PlugUpdate, trzeba zadzwonić: :call dein#update(). Szczerze mówiąc, nie znalazłem wyjaśnienia tego wyboru projektu.

Ponadto ktoś stworzył wtyczkę, która udostępnia te „brakujące” polecenia. Nie mam pojęcia, czy jest to dobry pomysł, czy też jest to sprzeczne z głównym pomysłem menedżera wtyczek, ale autor wspomina o tym w FAQ pliku doc.

Dein.vim obsługuje pobieranie wtyczek z Github (z ułatwionym dostępem do wtyczek z vimscript.org) oraz z lokalnych katalogów.

Menedżer wtyczek zapewnia klasyczne funkcje, takie jak aktualizowanie i wyłączanie wtyczek. Pozwala również na wykonanie haków w czasie instalacji.

Zauważ, że zgodnie z FAQ, wydaje się, że musisz ręcznie budować helptagi wtyczek, które instaluje.

Ciekawe jest to, że autor chce, aby dein.vim był łatwy w testowaniu i utrzymaniu, więc repozytorium zawiera również niektóre skrypty testowe.

Na koniec powiem, że ten menedżer wtyczek wydaje się być lekki i szybki, co jest interesujące, ale myślę, że jest mniej przyjazny dla użytkownika niż na przykład wtyczka vim lub Vundle .


Aha, Shougo opisuje dein.vim jako „Menedżer wtyczek Vim / Neovim o ciemnej mocy”, jeśli ktoś wie, co to znaczy, nie wahaj się edytować tej odpowiedzi: Jestem ciekawy ;-)


1
„Dark powered” to fraza, którą znajdziesz w pluginach vim Shougo, które mają wsparcie / lub są tylko dla NeoVim.
Yonsy Solis,

8
Myślę, że wyrażenie „Dark powered” pochodzi od „użytkowników Light Vim” - tych, którzy używają tylko domyślnych funkcji i „użytkowników Dark Vim” - tych, którzy próbują używać go jako IDE lub przynajmniej używają wielu wtyczek i mają dużo linii dodanych do pliku vimrc (więcej o tym tutaj w prezentacji Shougo- slideshare.net/Shougo/lets-talk-about-neovim - slajd 6)
lewiatan

1
@lewiatan: Dzięki, myślę, że masz właściwą odpowiedź. (Ciekawa prezentacja Shougo przy okazji)
statox

1
@statox Shougo stwierdza : „Dein.vim porzuca również użycie komend na rzecz wywoływania funkcji, co może również przyczynić się do wydajności (choć nie jestem pewien)”.
Alexej Magura

1
@statox, Lulz, nie, to chyba nie są słowa Shougo, więc nie zdawałem sobie sprawy, że to nie był jego blog.
Alexej Magura

13

Zarówno Vim 8.0, jak i Neovim mają swój wbudowany menedżer pakietów. W Vimie 8.0 utwórz następujące katalogi:, .vim/pack/*/startgdzie *jest dowolna nazwa, której chcesz użyć; np .vim/pack/jimmy/start.

Sklonuj wtyczkę do katalogu startowego, tak jak gdybyś używał patogenu.

W przypadku Neovim katalogi są nieco dłuższe:

.local/share/nvim/site/pack/*/start. Stamtąd zrób to samo, co dla Vima.

Kolejny menedżer wtyczek nie jest wcale potrzebny.

W Vimie lub Neovimie biegnij :h packagespo trochę więcej szczegółów. Przeczytaj część o kolorach, ponieważ są one różne, choć niewiele. Nie potrzebujesz żadnych dodatkowych instrukcji w swoich .vimrclub swoich nvim/init.vimplikach.

Mam nadzieję, że to pomaga.


8

Szczególnie podoba mi się VAM do samodzielnego wdrożenia: wszystko czego potrzebujesz to twój, .vimrca następnie uruchom vim.

Więc nie potrzebujesz To Installlinii używanej przez większość innych menedżerów wtyczek (pierwszy krok instalacji samego menedżera wtyczek).


6

Jeśli chodzi o mnie, chcę menedżera wtyczek, którego używam, do obsługi zależności.

Powodem jest to, że utrzymuję kilka wtyczek i mam wiele wzajemnych zależności: wszyscy używają biblioteki ogólnej, silnik szablonu / fragmentu jest używany przez pakiet C ++, wtyczka refaktoryzująca używa również wtyczki biblioteki ctags , i tak dalej. Wymaganie od użytkownika końcowego wykonania do 10 linii do zainstalowania interesujących wtyczek nie wydaje mi się dobrym rozwiązaniem.

Jak dotąd znam tylko dwie takie wtyczki: vim-addon-manager i NeoBundle . VAM rozwidlił swój kod bazy danych na vim-pi po wielu wymianach na oficjalnej liście mailingowej vim. Pomysł polegał na tym, że NeoBundle (i każda inna wtyczka zainteresowana zarządzaniem zależnościami) może ostatecznie wykorzystać vim-pi.

Ostatnio natknąłem się na vim-flavour, który obsługuje również zależności. Na ten temat sprawdza wersje wtyczek, aby zainstalować właściwą.

Uwaga: od mojej pierwszej odpowiedzi

  • Rozwój NeoBundle został zatrzymany;
  • i chociaż vim-pi regularnie aktualizuje swoją bazę danych z wtyczek na vim.org, a VAM nadal może być używany do wyrażania zależności, wydaje się, że nie można już dodawać aliasu do bazy danych vim-pi: MR / PR nie są już łączone

AFAIK, żadna z tych wtyczek nie klonuje / instaluje / aktualizuje wtyczek w tle / równolegle. Ponieważ nie instaluję nowego środowiska vim ani nie aktualizuję wtyczek, które instalowałem raz w miesiącu, szczerze mówiąc, nie obchodzi mnie to. Oczywiście aktualizują 'helptags', zajmują się 'rtp'i tak dalej.


vim-plugREADME ma przykład z napisem „Zależności grupowe”. Próbowałeś tego, czy różni się on od metod VAM / NeoBundle?
muru

Brakowało mi zależności grupowych w dokumentacji wtyczki vim. Widziałem jednak, że usunęli oni próbę obsługi zależności z bazy kodu. Jeśli chodzi o zależności grupowe, nie widzę, jak to może pomóc. Zależności nie powinny być deklarowane przez użytkownika końcowego. Powinny być zadeklarowane przez autorów wtyczek. Jeśli spojrzysz na wtyczkę lh-cpp i przyjrzysz się uważnie, zobaczysz, że zależności nie są czymś liniowym. To zorientowany wykres, który musi być acykliczny, aby uniknąć problemów.
Luc Hermitte

Jak dotąd korzystam z VAM od ponad dekady i jestem z tego zadowolony. Użyłem jednak vim-flavour, ponieważ integracja z travis jest znacznie prostsza - w celu przetestowania moich wtyczek. I niestety, oba używają innej składni do deklarowania zależności.
Luc Hermitte

1
FYI: Rozwój NeoBundle został zatrzymany (od 23 lutego 2016 r.). Zamiast tego zaleca swojego następcę Dein.vim (tego samego autora).
Peter V. Mørch

3

Większość tych menedżerów wtyczek świetnie sobie radzi z zarządzaniem wtyczkami, ale pozostawia ci problem z zarządzaniem nimi vimrc. Jeśli masz wiele komputerów i chcesz mieć taką samą konfigurację w całej sieci, Vire sprawia, że ​​jest to bardzo łatwe. Nie potrzebujesz git ani wymyślania submodułów, ani żadnego dodatkowego wysiłku, aby uzyskać konfigurację lub migrację.

  • Zainstaluj Python, który i tak jest wymagany w większości nowoczesnych wtyczek Vima
  • pip install vire
  • Zamieść swoje istnienie vimrcna Githubie jako przedmiot i utrzymaj je tam
  • W systemie Windows, vire -iaby zainstalować najnowszą wersję Vima lub (Neovim z -i -n)
  • Usuń wszystkie istniejące wywołania funkcji wtyczek i zdefiniuj skomentowane wywołania, aby zainstalować wszelkie wtyczki " Plug 'tpope/vim-unimpaired'
  • vire gistID

Następnie uruchom w viredowolnym momencie, gdy chcesz vimrczaktualizować wtyczki lub wtyczki lub -izaktualizować aplikację.

Vire wykorzystuje packfunkcję Vima / Neovima do ładowania wtyczek. Możesz także nadal korzystać z istniejącego menedżera wtyczek, ale używać Vire tylko do instalowania Vima, samego vimrci menedżera wtyczek, jeśli jest to preferowane.


1

Dla osób, które chcą pełnego menedżera wtyczek korzystającego z Pathogen, istnieje również apt-vim. Możesz go zainstalować za pomocą curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (jak opisano tutaj: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Po zainstalowaniu możesz po prostu wpisać apt-vim installnazwę repozytorium pakietów, podobnie jak menedżer pakietów Ubuntu apt.


1
Jest to zasadniczo odpowiedź tylko do łącza. Gdybyś mógł przejść do bardziej szczegółowych informacji na temat instalacji i używania apt-vim, byłoby to do przyjęcia.
Tumbler41,

Zaktualizowałem to. Naprawdę myślałem, że powinien to być komentarz do wpisu na temat Pathogena, ale nie mam wystarczającej liczby punktów, aby móc komentować
Melanie Day

1
Brak linku do wtyczki. Również ponownie wtyczka, która sugeruje curl URL |sh. Nigdy nie sugerowałbym nikomu, aby uruchamiał jakiś przypadkowy kod z Internetu. To naprawdę zły nawyk bezpieczeństwa.
Christian Brabandt,

0

Szukałem sposobu użycia, pathogenale łatwo go zaktualizować i uczynić przenośnym, więc być może bashskrypt może być pomocny (przy użyciu vim-plugfunkcji) -

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

A potem przykład .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
Czy możesz dodać do tego kilka szczegółów? Podstawowym pytaniem, jakie stawia OP, jest: „Czy ktoś może dać mi krótki przegląd różnic [w menedżerach pakietów], abym mógł zdecydować, który z nich będzie dla mnie najlepszy”? Jak twoje zgłoszenie pomaga na to odpowiedzieć? Co konkretnie dodajesz do patogenu, którego on nie ma? Tego typu rzeczy.
B Layer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.