Vim 8 wurde heute veröffentlicht und die Versionshinweise erwähnen eine neue "Paket" -Funktion. Was ist das und wie soll ich es verwenden?
Ersetzt es vor allem die guten alten Plugin-Manager ?
Vim 8 wurde heute veröffentlicht und die Versionshinweise erwähnen eine neue "Paket" -Funktion. Was ist das und wie soll ich es verwenden?
Ersetzt es vor allem die guten alten Plugin-Manager ?
Antworten:
Die entsprechende Dokumentation finden Sie zunächst :h packages
in 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:
start
Ordner enthält Plugins, die beim Start automatisch geladen werden.opt
Ordner enthält "optionale" Plugins, die mit dem packadd
Befehl geladen werden .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 start
und stellt diese mit zur opt
Verfü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 helptags
Befehl. Mit dem Vim8-Commit wurden zwei Zeilen in das helptag
Dokument 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 ALL
alle Hilfetags generiert.
:helptags ALL
.
:helptag ALL
werde ich mal reinschauen und hinzufügen, danke für den Vorschlag!
update
Ihre Plugins oder clean
diese 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.
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
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.
Erstellen Sie ein pack/*/start
Verzeichnis 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/start
oder ~/.config/nvim/pack/bar/start
nicht ~/.config/nvim/pack/start
.
Gehen Sie in das pack/*/start
Verzeichnis und klonen Sie das Paket dort.
: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
.:helptags ALL
Tags 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 tags
Datei 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.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 vimrc
Ihnen überlassen . Wenn Sie mehrere Computer haben und dieselbe Konfiguration auf mehreren Computern verwenden möchten, ist dies mit Vire ganz einfach.
package
Feature 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ürpathogen
, vorausgesetzt, Sie verlassen sich nicht aufpathogen
die undurchsichtigen Funktionen von. Es macht keinen Versuch, etwa zu ersetzenVundle
. 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.