Was ist der Unterschied zwischen den vim Plugin Managern?


197

Ich habe mir die verschiedenen Paketmanager für vim und denjenigen angesehen, für den ich mich für vim-plug entschieden habe, aber ich habe andere wie Pathogen und Vundle gesehen, und ich weiß ehrlich gesagt nicht, was der Unterschied ist.

Kann mir jemand einen kurzen Überblick über die Unterschiede geben, damit ich entscheiden kann, welche für mich am besten funktioniert?


Antworten:


142

vim-plug ist eine nette Alternative zu Vundle, es macht aus technischer Sicht etwas andere Dinge, die es schneller machen sollten ( siehe dies ). Es hat die meisten (oder alle?) Funktionen von Vundle.

  • Parallel Update - Vorgang für Vim mit einem +ruby, +pythonoder Neovim. Fällt mithilfe von Vimscript in den sequenziellen Modus zurück, wenn keiner verfügbar ist.
  • Lazy Loading, für einen schnelleren Start ( siehe dies ).
  • Plugins installieren.
  • Plugins aktualisieren.
  • Aktualisierungen überprüfen / zurücksetzen.
  • Unterstützt OSX-, Linux- und UNIX-Systeme sowie MS Windows.
  • Post-Update-Hooks kompilieren zB YCM automatisch neu

Um es zu benutzen:

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

Und in deinem vimrc:

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

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

Dann geben Sie den Befehl

:PlugInstall

um die aufgelisteten Plugins zu installieren.


1
Danke für die Empfehlung; Ich habe mich vorher gegen Lader gewehrt, weil ich meine Ladezeiten gerne flott mag. Das einzige, was ich nicht unbedingt erforschen musste, war :PlugInstallein neues Plugin. Sogar die offiziellen Dokumente verdecken dies ein wenig.
msw

7
während ich vim-Stecker mögen, beachten Sie, dass es einige vim Standardwerte ändert , die Sie überraschend finden könnte / verwirrend github.com/junegunn/vim-plug/issues/379
laktak

Unter Windows verfügt vim über eine Ordner- Versionsnummer , z. B. vim81 für vim 8.1. Stellen Sie im ersten Schritt bei der Verwendung von Curl sicher, dass der Ordner ist ..\vim81\autoload\..und nicht ..\.vim\autoload\...
Stephen Jacob

56

Erreger ist einfach. Im Wesentlichen macht es einfach:

  • Autoload-Plugins aus einem Ordner
  • Hilfetags für diese Plugins generieren

Vorteile:

  • minimalistisch

Nachteile:

  • alles andere manuell erledigt (installieren, aktualisieren, entfernen, etc.)
  • Kein fauler Ladevorgang

Um es zu installieren, lade es herunter pathogen.vimauf ~/.vim/autoload:

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

Und füge hinzu .vimrc:

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

Wenn Sie nicht verrückt werden möchten, rufen :HelptagsSie nur an, wenn Sie es brauchen.

Plugins werden dann hinzugefügt ~/vim/bundle.


20
Nur um klar zu sein, Pathogen ist kein Plugin-Manager. Alles was es tut, ist den Laufzeitpfad zu verwalten. Das ist es. Alle Plugins, die Sie zu ~ / .vim / bundle hinzufügen (dh der Standardspeicherort, den Sie ändern können), fügen die Dateien des Plugins dem Laufzeitpfad von vim hinzu, damit auf sie zugegriffen werden kann. Das manuelle Installieren, Aktualisieren und Entfernen ist kein wirklicher Nachteil, wenn nicht so viele Plugins installiert sind. Außerdem können Sie beim Aktualisieren von Plug-ins festlegen, dass nur eine Teilmenge der Änderungen abgerufen und nicht auf die neueste Version eines Plug-ins aktualisiert wird, wodurch Sie viel Kontrolle haben.
Akshay

1
@AkshayHegde Ja, als ich anfing, die Vundle-Antwort zu schreiben, musste ich zurückgehen und "Plugin-Manager" aus dieser Antwort herausarbeiten. Abgeordnet über den Betrug, deshalb verwende ich ihn weiterhin anstelle von irgendetwas anderem.
muru

1
Vim-Pandemie ist eine schöne Ergänzung zu Pathogen. Es verwaltet die Remote-Repositorys hinter den Plugins, und Pathogen übernimmt den Laufzeitpfad. Dies bedeutet, dass man zwei Werkzeuge benötigt, aber für unterschiedliche Aufgaben, die "getrennt" behandelt werden sollten. Der Vorteil von Pathogen + Pandemic, den ich am überzeugendsten fand: Es besteht keine Notwendigkeit, sich mit Git-Submodulen für die Bundles zu befassen.
Jalanb

2
Ich benutze Pathogen als Plugin Loader. Aber ich benutze Git-Submodule, um die Versionen der einzelnen Plugins zu steuern. Der minimalistische Ansatz eignet sich also gut für meinen Anwendungsfall. Wie gehen die anderen Manager mit Versions- und Plug-in-Updates um?
Martin York

2
@JaDogg Oh, das ist aus der README- Datei : "Normalerweise erwartet Vim, dass Sie: helptags für jedes Verzeichnis mit Dokumentation ausführen (z. B.: helptags ~ / .vim / doc). Mit pathogen.vim wird ein: Helptags-Befehl bereitgestellt, der dies ausführt Wenn Sie wirklich verrückt werden möchten, können Sie in Ihrem vimrc sogar Helptags aufrufen. Ich möchte nicht verrückt werden. " Ich würde sagen, wenn Sie viele Plugins haben, könnte dies den Start etwas verlangsamen. Und Sie müssen es wirklich nicht bei jedem Start ausführen, ein einziges Mal für jede Plugin-Installation / -Upgrade sollte ausreichen.
muru

43

Vundle ist komplexer. Es ist ein Paketmanager à la aptoder yumfür Plugins. Es kann:

  • Suche einen Plugin-Index
  • Plugins aktualisieren
  • Helptags automatisch generieren
  • Behalten Sie Plugins im Autoload-Ordner bei, aber verwenden Sie sie nicht
  • bereinige solche unbenutzten Plugins
  • Funktioniert unter Linux, OSX und MS Windows

Installieren:

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

Und füge dann hinzu .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

Verwenden Sie zum Installieren eines Plugins den PluginBefehl in .vimrc(weitere Beispiele in der Github-README-Datei):

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

Und dann anrufen :PluginInstallvon .vim(oder vim +PluginInstall +qall).


In der README-Datei zu NeoBundle, auf die Sie verlinkt haben, heißt es, dass das Projekt jetzt zugunsten von github.com/Shougo/dein.vim
Jonathan Hartley am

@JonathanHartley der "Dunkle"? Ich denke, ich hätte das kommen sehen sollen.
muru

13

dein.vim : Um diese Frage zu beantworten , füge ich hier den Plugin-Manager des bekannten Shougo hinzu.

Das Plugin hat laut README folgende Abhängigkeiten:

  • Vim >7.4 or neovim: Obwohl es eine gute Sache ist, Vim auf dem neuesten Stand zu halten, kann es für einige Benutzer problematisch sein, dass frühere Versionen nicht unterstützt werden
  • git: das ist ziemlich häufig für einen Paketmanager
  • rsync: das ist nicht so verbreitet wie git

Der Autor behauptet, es sei schneller als NeoBundle. Eine Benchmark finden Sie auf der Readme-Seite des Projekts .

Ein originelles Konzept dieses Plugin - Manager ist , dass es keine Befehle liefert, sondern nur Funktionen: zum Beispiel, die Plugins bearbeiten Sie nicht so etwas wie verwenden können :PlugUpdate, werden Sie anrufen müssen: :call dein#update(). Um ehrlich zu sein, habe ich keine Erklärung für diese Designauswahl gefunden.

Außerdem hat jemand ein Plugin erstellt , das diese "fehlenden" Befehle bereitstellt. Ich habe keine Ahnung, ob dies eine gute Idee ist oder ob dies gegen die Hauptidee des Plugin Managers verstößt, aber der Autor erwähnt sie in den FAQ der doc Datei.

Dein.vim unterstützt das Abrufen von Plugins von Github (mit einem erleichterten Zugriff auf Plugins von vimscript.org) und von lokalen Verzeichnissen.

Der Plugin-Manager bietet einige klassische Funktionen wie das Aktualisieren und Deaktivieren der Plugins. Es ermöglicht auch die Ausführung von Hooks zur Installationszeit.

Beachten Sie, dass Sie laut FAQ die Hilfetags der installierten Plugins manuell erstellen müssen .

Ein interessanter Punkt ist, dass der Autor möchte, dass dein.vim einfach zu testen und zu warten ist, sodass das Repository auch einige Testskripte enthält.

Schließlich würde ich sagen, dass dieser Plug-in-Manager so konzipiert ist, dass er leicht und schnell ist, was interessant ist, aber ich denke, er ist weniger benutzerfreundlich als beispielsweise Vim-Plug oder Vundle .


Außerdem beschreibt Shougo dein.vim als "Dark Powered Vim / Neovim Plugin Manager". Wenn jemand weiß, was es bedeutet, kann er diese Antwort gerne bearbeiten: Ich bin neugierig ;-)


1
"Dark powered" ist eine Phrase, die Sie in Shougos Vim-Plugins finden werden, die Unterstützung haben / oder nur für NeoVim sind.
Yonsy Solis

8
Ich denke, dass der Ausdruck "Dark powered" von den "Light Vim-Benutzern" stammt - von denen, die nur Standardfunktionen verwenden, und von den "Dark Vim-Benutzern" - von denen, die versuchen, es als IDE zu verwenden, oder von denen, die zumindest viele Plugins verwenden und über viele verfügen der Zeilen, die zu ihrer vimrc-Datei hinzugefügt wurden (mehr dazu hier in Shougos Präsentation - slideshare.net/Shougo/lets-talk-about-neovim - Folie 6)
Lewiatan,

1
@lewiatan: Danke ich denke du bekommst die richtige Antwort. (Interessante Shougos Präsentation übrigens)
statox

1
@statox Shougo gibt an : "Dein.vim verzichtet auch auf die Verwendung von Befehlen zugunsten von Funktionsaufrufen, was ebenfalls zur Leistung beitragen kann (ich bin mir jedoch nicht sicher)."
Alexej Magura

1
@statox, Lulz, nein, das sind wahrscheinlich nicht Shougos Worte. Ich hatte nicht bemerkt, dass es nicht sein Blog war.
Alexej Magura

13

Sowohl Vim 8.0 als auch Neovim haben einen eigenen integrierten Paketmanager. Erstellen Sie in Vim 8.0 die folgenden Verzeichnisse:, .vim/pack/*/startwo *ist ein beliebiger Name, den Sie verwenden möchten; zB .vim/pack/jimmy/start.

Klonen Sie Ihr Plugin in das Startverzeichnis, so als ob Sie Pathogen verwenden würden.

Mit Neovim sind die Verzeichnisse etwas langwieriger:

.local/share/nvim/site/pack/*/start. Von dort aus machen Sie dasselbe wie für Vim.

Es wird überhaupt kein weiterer Plugin-Manager benötigt.

Gehen Sie in Vim oder Neovim :h packagesetwas genauer vor. Lesen Sie den Teil über Farben, weil sie unterschiedlich sind, wenn auch nicht viel. Sie benötigen keine zusätzlichen Anweisungen in Ihrer .vimrcoder Ihren nvim/init.vimDateien.

Ich hoffe, das hilft.


8

Ich mag VAM besonders wegen seiner Selbsteinführung: Alles, was Sie brauchen, ist Ihr .vimrcund dann starten Sie vim.

Sie brauchen also nicht die To InstallLeitung, die von den meisten anderen Plug-In-Managern verwendet wird (der erste Schritt der Installation des Plug-In-Managers selbst).


6

Ich möchte den Plugin-Manager, mit dem ich Abhängigkeiten unterstütze.

Der Grund dafür ist, dass ich mehrere Plugins pflege und viele Abhängigkeiten habe: Eine generische Bibliothek wird von allen verwendet, die Template / Snippet-Engine wird von der C ++ - Suite verwendet, das Refactoring-Plugin verwendet auch das ctags-Bibliotheks-Plugin , und so weiter. Es scheint mir keine gute Lösung zu sein, wenn der Endbenutzer bis zu 10 Zeilen ausführen muss, um die Plugins zu installieren, an denen er interessiert ist.

Bisher kenne ich nur zwei solche Plugins: vim-addon-manager und NeoBundle . VAM hat seinen Datenbankcode nach vielen Austauschen auf der offiziellen Mailingliste von VIM an VIM-Pi weitergegeben . Die Idee war, dass NeoBundle (und jedes andere Plugin, das an der Verwaltung von Abhängigkeiten interessiert ist) schließlich vim-pi ausnutzen könnte.

Ich bin kürzlich auf Vim-Flavour gestoßen , das auch Abhängigkeiten behandelt. Zu diesem Thema werden die Plugin-Versionen überprüft, um die richtige zu installieren.

Hinweis: Seit meiner ersten Antwort

  • Die Entwicklung von NeoBundle wurde eingestellt.
  • Obwohl vim-pi seine Datenbank regelmäßig über Plugins auf vim.org aktualisiert und VAM weiterhin zum Ausdrücken von Abhängigkeiten verwendet werden kann, scheint es nicht mehr möglich zu sein, der vim-pi-Datenbank einen Alias ​​hinzuzufügen: MR / PR werden nicht mehr zusammengeführt

AFAIK, keines dieser Plugins klont / installiert / aktualisiert Plugins im Hintergrund / parallel. Da ich weder eine neue vim-Umgebung installiere noch die Plugins aktualisiere, die ich einmal im Monat installiert habe, ist mir das ehrlich gesagt egal. Sie aktualisieren 'helptags', kümmern sich natürlich um 'rtp'und so weiter.


vim-plugIn der README-Datei finden Sie ein Beispiel mit der Aufschrift "Gruppenabhängigkeiten". Haben Sie das versucht oder unterscheidet es sich von den Methoden von VAM / NeoBundle?
muru

Ich habe Gruppenabhängigkeiten in der Dokumentation zu vim-plug übersehen. Ich habe gesehen, dass sie ihren Versuch, Abhängigkeiten zu unterstützen, aus der Codebasis entfernt haben. In Bezug auf Gruppenabhängigkeiten verstehe ich nicht, wie es helfen kann. Abhängigkeiten sollten nicht vom Endbenutzer deklariert werden. Sie sollten von den Plugin-Autoren deklariert werden. Wenn Sie sich das lh-cpp-Plugin genauer ansehen, werden Sie feststellen, dass die Abhängigkeiten nicht linear sind. Es ist eine orientierte Grafik, die azyklisch sein muss, um Probleme zu vermeiden.
Luc Hermitte

Bisher benutze ich VAM seit mehr als einem Jahrzehnt und bin damit zufrieden. Dennoch habe ich Vim-Flavour verwendet, da es viel einfacher ist, es von Travis aus zu integrieren - um meine Plugins zu testen. Und leider verwenden beide eine andere Syntax, um Abhängigkeiten zu deklarieren.
Luc Hermitte

1
Zu Ihrer Information : Die Entwicklung von NeoBundle wurde eingestellt (seit dem 23. Februar 2016). Es empfiehlt stattdessen seinen Nachfolger Dein.vim (vom selben Autor).
Peter V. Mørch

3

Die meisten dieser Plugin-Manager können Plugins hervorragend verwalten, überlassen vimrces Ihnen jedoch, die Plugins zu verwalten. Wenn Sie mehrere Computer haben und dieselbe Konfiguration auf mehreren Computern verwenden möchten, ist dies mit Vire ganz einfach. Sie benötigen weder Git noch Submodule oder zusätzlichen Aufwand, um Setup oder Migration durchzuführen.

  • Installieren Sie Python, das ist, was die meisten modernen Vim-Plugins geschrieben haben und sowieso erforderlich sind
  • pip install vire
  • Poste dein bestehendes vimrcauf Github und pflege es dort
  • Wenn unter Windows, vire -ium das neueste Vim oder (Neovim mit -i -n) zu installieren
  • Entfernen Sie alle vorhandenen Plugin-Funktionsaufrufe und definieren Sie auskommentierte Aufrufe, um Plugins zu installieren " Plug 'tpope/vim-unimpaired'
  • vire gistID

Führen vireSie sie dann aus, wann immer Sie möchten, dass Ihre vimrcoder Plugins aktualisiert werden, oder mit -i, um auch die App zu aktualisieren .

Vire nutzt die Funktion von Vim / Neovim pack, um Plugins zu laden. Sie können auch weiterhin Ihren vorhandenen Plug-in-Manager verwenden, aber Vire verwenden, um nur Vim, den vimrcund den Plug-in-Manager selbst zu installieren, wenn dies bevorzugt wird.


1

Für Leute, die einen vollständigen Plugin-Manager mit Pathogen wollen, gibt es auch apt-vim. Sie können es mit installieren curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (wie hier beschrieben: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Nach der Installation können Sie einfach apt-vim installFolgendes eingeben, gefolgt vom Namen des Paket-Repositorys, ähnlich wie beim Paket-Manager von Ubuntu apt.


1
Dies ist im Wesentlichen eine Nur-Link-Antwort. Wenn Sie etwas detaillierter auf die Installation und Verwendung von apt-vim eingehen könnten, wäre dies akzeptabel.
Tumbler41

Ich habe es aktualisiert. Eigentlich dachte ich, es sollte ein Kommentar zum Beitrag über Pathogen sein, aber ich habe nicht genug Punkte, um Kommentare
Melanie Day

1
Link fehlt zum Plugin. Auch wieder ein Plugin, das vorschlägt curl URL |sh. Ich würde niemals jemandem vorschlagen, zufälligen Code aus dem Internet auszuführen. Wirklich, das ist eine schlechte Sicherheitsgewohnheit.
Christian Brabandt

0

Ich habe nach einer Möglichkeit gesucht, sie zu verwenden, sie pathogenaber einfach zu aktualisieren und portabel zu machen. Vielleicht ist ein bashSkript hilfreich (Verwendung der vim-plugFunktionalität).

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

Und dann ein Beispiel .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
Können Sie dem einige Details hinzufügen? Die Hauptfrage von OP lautet: "Kann mir jemand einen kurzen Überblick über die Unterschiede [bei Paketmanagern] geben, damit ich entscheiden kann, welche für mich am besten geeignet ist?" Wie hilft Ihre Einreichung, das zu beantworten? Was fügst du dem Erreger hinzu, das er nicht hat? Derartiges.
B Layer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.