Was ist die Vim8-Paketfunktion und wie soll ich sie verwenden?

Antworten:

74

Die entsprechende Dokumentation finden Sie zunächst :h packagesin der neu kompilierten Vim8-Version und hier auf Github .

Ein erster wichtiger Hinweis zum Wortschatz: In Vim8 ist ein Paket wie folgt definiert:

Ein Vim-Paket ist ein Verzeichnis, das ein oder mehrere Plugins enthält.

Dies bedeutet, dass der neue Paketmanager erstellt wurde, damit Benutzer alle ihre Plug-ins im selben Archiv verwalten können. Das Dokument listet die folgenden Vorteile auf:

  • Ein Paket kann als Archiv heruntergeladen und in ein eigenes Verzeichnis entpackt werden. Somit werden die Dateien nicht mit Dateien anderer Plugins gemischt. Das macht es einfach zu aktualisieren und zu entfernen.

  • Ein Paket kann ein Git-, Quecksilber- usw. Repository sein. Das macht es wirklich einfach zu aktualisieren.

  • Ein Paket kann mehrere Plugins enthalten, die voneinander abhängig sind.

  • Ein Paket kann Plugins enthalten, die beim Start automatisch geladen werden, und solche, die nur bei Bedarf mit geladen werden :packadd.

Die Idee ist also, einen Ordner zu erstellen, der alle Plugins mit der folgenden Struktur enthält:

$HOME/.vim/pack/my-plugins/
                        start/
                            foo/
                                plugin/
                                    foo.vim
                                syntax/
                                    some.vim
                            bar/
                                plugin/
                                    bar.vim
                        opt/
                            buzz/
                                plugin/
                                    buzz.vim

Die Position des Ordners wird durch die Option packpath(Siehe :h 'packpath') festgelegt.

Beachten Sie die Bedeutung der Struktur Ihres Ordners:

  • Der startOrdner enthält Plugins, die beim Start automatisch geladen werden.
  • Der optOrdner enthält "optionale" Plugins, die mit dem packaddBefehl geladen werden .
  • Die Unterordner ( plugin, autoload, doc, ...) sind diejenigen , die Sie in den Plugins gewohnt sind.

Hier ist eine Zusammenfassung der Ordner:

start/foobar/plugin/foo.vim     " always loaded, defines commands
start/foobar/plugin/bar.vim     " always loaded, defines commands
start/foobar/autoload/foo.vim   " loaded when foo command used
start/foobar/doc/foo.txt        " help for foo.vim
start/foobar/doc/tags           " help tags
opt/fooextra/plugin/extra.vim   " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt      " help for extra.vim
opt/fooextra/doc/tags           " help tags

Sobald diese Dateien an der richtigen Stelle sind, lädt das Öffnen von Vim die Plugins startund stellt diese mit zur optVerfügung :packadd.


Kann diese Funktion nun die vorhandenen Plugin-Manager ersetzen?

Haftungsausschluss: Dieser Teil kann ein wenig meinungsbildend sein.

Ich denke, der Ansatz dieses neuen Paketmanagers unterscheidet sich wirklich von dem der Plugins-Manager, an die wir gewöhnt waren, da er dazu dient, ein (oder mehrere) Archiv (e) zu verwalten, die einige Plugins enthalten.

Standardmäßig bietet der Paketmanager keine Funktionen, mit denen Sie Ihre Plugins einzeln aktualisieren, automatisch von einer Github-Adresse abrufen oder die Plugins auswählen können, die Sie aktivieren / deaktivieren möchten.

Ich bin mir nicht sicher, ob es wirklich praktisch ist, es sofort zu verwenden (insbesondere, weil der Umgang mit verschachtelten Versionskontroll-Repositorys eine schmerzhafte Aufgabe sein kann), aber ist dies vielleicht die Gelegenheit, Plugin-Manager effizienter zu machen?

Jetzt ist es auch vorstellbar, die vorhandenen Plugins so zu verschieben, dass sie die vom Paketmanager geforderte Struktur annehmen und direkt vom Dateisystem aus verwalten. Möglicherweise wird ein Wrapper erstellt, um diese neue Funktion zu verwenden.


EDIT Wie @Sato Katsura vorgeschlagen hier ist eine Notiz über den helptagsBefehl. Mit dem Vim8-Commit wurden zwei Zeilen in das helptagDokument eingefügt :

:helpt[ags] [++t] {dir}

Generate the help tags file(s) for directory {dir}.
When {dir} is ALL then all "doc" directories in 'runtimepath' will be used.

Dies bedeutet, dass der neue Paketmanager die Generierung der im Benutzerarchiv abgelegten Hilfetags erleichtert. Mit dem einzigen Befehl werden :helptags ALLalle Hilfetags generiert.

statox
quelle
11
Gute Zusammenfassung. Das packageFeature soll Vimballs und den damit verbundenen Dinosauriern endlich ein Ende setzen und nicht mit den modernen Plugin-Managern konkurrieren. Dies ist ein praktikabler Ersatz für pathogen, vorausgesetzt, Sie verlassen sich nicht auf pathogendie undurchsichtigen Funktionen von. Es macht keinen Versuch, etwa zu ersetzen Vundle. Das Konzept von package als Sammlung von Plugins ist gut durchdacht und möglicherweise nützlich, aber ich befürchte, niemand wird es verwenden, da die modernen Plugin-Manager es nicht unterstützen. Und Plugin-Manager werden es nicht unterstützen, weil niemand es benutzt. Es ist ein kleines Henne-Ei-Problem.
Sato Katsura
2
Unabhängig: Möglicherweise möchten Sie eine Anmerkung zu hinzufügen :helptags ALL.
Sato Katsura
1
@Sato danke für den Hinweis zu den Vimballs: Da ich sie nie benutze, habe ich auch nicht darüber nachgedacht, aber jetzt, wo Sie es erwähnen, scheint es ziemlich offensichtlich zu sein. Ich bin mit Ihnen einverstanden, was das "Niemand wird es benutzen" angeht. Ich bin da nicht wirklich optimistisch. Für die :helptag ALLwerde ich mal reinschauen und hinzufügen, danke für den Vorschlag!
statox
Ich habe die Off-Topic-Diskussion in den Chat verschoben .
Martin Tournoij
4
minpac ist ein neuer Paketmanager für Vim 8 (und NeoVim). Es baut auf den Paketen von Vim 8 auf und stellt Befehle für updateIhre Plugins oder cleandiese zur Verfügung (Entfernen nicht verwendeter Plugins). Für Bonuspunkte wird auch die neue Jobsteuerungsfunktion verwendet, um mehrere Aktualisierungen gleichzeitig durchzuführen. Ich denke, es ist wirklich vielversprechend, weil es die eingebauten Pakete mit einer besseren UX erweitert.
Nelstrom
11

Um das "Kann es Plugin-Manager ersetzen" zu erweitern,

Früher habe ich Vundle verwendet, was fantastisch war, aber jetzt habe ich es durch ungefähr 18 Zeilen Bash ersetzt.

Ich finde es nützlich, Unterordner im Paketverzeichnis zu verwenden, um verwandte Plugins zu gruppieren. ZB "Syntax" oder "Ruby".

Das relevante Bash-Beispiel ist unten. In eine Datei legen und ausführen.

Zusätzliche Diskussion zum Thema unter: https://stories.abletech.nz/get-rid-of-your-vim-plugin-manager-7c8ff742f643#.abnjauzgk

#!/usr/bin/env bash
# This file lives in ~/.vim/pack/install.sh
# Remember to add executable: chmod +x ~/.vim/pack/install.sh
#
# Create new folder in ~/.vim/pack that contains a start folder and cd into it.
#
# Arguments:
#   package_group, a string folder name to create and change into.
#
# Examples:
#   set_group syntax-highlighting
#
function set_group () {
  package_group=$1
  path="$HOME/.vim/pack/$package_group/start"
  mkdir -p "$path"
  cd "$path" || exit
}
# Clone or update a git repo in the current directory.
#
# Arguments:
#   repo_url, a URL to the git repo.
#
# Examples:
#   package https://github.com/tpope/vim-endwise.git
#
function package () {
  repo_url=$1
  expected_repo=$(basename "$repo_url" .git)
  if [ -d "$expected_repo" ]; then
    cd "$expected_repo" || exit
    result=$(git pull --force)
    echo "$expected_repo: $result"
  else
    echo "$expected_repo: Installing..."
    git clone -q "$repo_url"
  fi
}
(
set_group ruby
package https://github.com/tpope/vim-rails.git &
package https://github.com/tpope/vim-rake.git &
package https://github.com/tpope/vim-bundler.git &
package https://github.com/tpope/vim-endwise.git &
wait
) &
(
set_group syntax
package https://github.com/kchmck/vim-coffee-script.git &
package https://github.com/tpope/vim-markdown.git &
package https://github.com/ap/vim-css-color.git &
wait
) &
(
set_group colorschemes
package https://github.com/altercation/vim-colors-solarized.git &
wait
) &
wait
Nocken
quelle
4

Die Antwort von @statox ist sehr aussagekräftig, aber für einen neuen Benutzer kann dies ablenken, da er die Hilfedatei direkt lesen kann. Ich möchte in Zeigern skizzieren, was Sie tun müssen.

  1. Erstellen Sie ein pack/*/startVerzeichnis unter einem der Verzeichnisse, die von bereitgestellt werden set packpath. Ich habe in ~/.config/nvim/pack/*/start. Beachten Sie, dass Sie einen beliebigen Verzeichnisnamen anstelle von verwenden *können, diesen jedoch nicht vollständig auslassen können. Ich weiß nicht, warum. Sie können zum Beispiel das Verzeichnis verwenden ~/.config/nvim/pack/foo/startoder ~/.config/nvim/pack/bar/startnicht ~/.config/nvim/pack/start.

  2. Gehen Sie in das pack/*/startVerzeichnis und klonen Sie das Paket dort.

  3. Starten Sie n / vim und :scriptnamesüberprüfen Sie, ob alles geladen ist. Machen Sie sich keine Sorgen, wenn nicht jedes Teil geladen ist, da einige Dateien nach einem bestimmten Hook geladen werden sollen, z autoload/plugin.vim.
  4. Entfernen Sie zum Deinstallieren einfach das Verzeichnis, in das Sie das Paket geklont haben. Ich brauche nichts anderes zu tun.
  5. Erstellen Sie :helptags ALLTags für alle Hilfedokumente. Verwenden Sie diese :helptags {dir}Option, um Tags für die Hilfedokumente im Verzeichnis zu generieren dir. Wenn Sie zum Beispiel Ihr Plugin einfügen ~/.config/nvim/pack/foo/plugin_name, tun Sie dies :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Das erzeugt eine tagsDatei im doc-Verzeichnis des Plugins. Wenn Sie das Plugin aus dem Verzeichnis entfernen, wird die Tags-Datei gelöscht und vim findet die Hilfedatei nicht, sodass Sie die doc-Datei nicht manuell deinstallieren müssen.
klaus
quelle
2

Das neue Format kann als Pathogen-Äquivalent betrachtet werden, sodass noch Platz für einen Manager vorhanden ist, der die gewünschten Plugins herunterladen kann. Es gibt ein paar neue Plugin-Manager, die dieses neue Pack-Format nutzen, aber ich habe immer noch Vire entwickelt, da sie die Kopfschmerzen der Verwaltung vimrcIhnen überlassen . Wenn Sie mehrere Computer haben und dieselbe Konfiguration auf mehreren Computern verwenden möchten, ist dies mit Vire ganz einfach.

Genotrance
quelle
Wenn Sie mehrere WINDOWS-Computer haben und die gleiche Konfiguration möchten ... FTFY
Dan J.