Vim 8 a été publié aujourd'hui et les notes de publication mentionnent une nouvelle fonctionnalité de "package". De quoi s'agit-il et comment dois-je l'utiliser?
Plus important encore, remplace-t-il les bons vieux gestionnaires de plug-ins ?
Vim 8 a été publié aujourd'hui et les notes de publication mentionnent une nouvelle fonctionnalité de "package". De quoi s'agit-il et comment dois-je l'utiliser?
Plus important encore, remplace-t-il les bons vieux gestionnaires de plug-ins ?
Réponses:
Tout d’abord, vous trouverez la documentation pertinente :h packages
sur la version Vim8 récemment compilée et ici sur Github .
Une première remarque importante concerne le vocabulaire: Dans Vim8, un paquet est défini comme suit:
Un paquet Vim est un répertoire qui contient un ou plusieurs plugins.
Cela signifie que le nouveau gestionnaire de paquets a été créé pour aider les utilisateurs à gérer tous leurs plugins dans la même archive. La doc énumère les avantages suivants:
Un paquet peut être téléchargé en tant qu’archive et décompacté dans son propre répertoire. Ainsi, les fichiers ne sont pas mélangés avec les fichiers d'autres plugins. Cela facilite la mise à jour et la suppression.
Un paquet peut être un dépôt git, mercurial, etc. Cela le rend vraiment facile à mettre à jour.
Un paquet peut contenir plusieurs plugins qui dépendent les uns des autres.
Un package peut contenir des plug-ins chargés automatiquement au démarrage et d'autres uniquement lorsque cela est nécessaire
:packadd
.
L'idée est donc de créer un dossier contenant tous les plugins avec la structure suivante:
$HOME/.vim/pack/my-plugins/
start/
foo/
plugin/
foo.vim
syntax/
some.vim
bar/
plugin/
bar.vim
opt/
buzz/
plugin/
buzz.vim
L'emplacement du dossier est défini par l'option packpath
(voir :h 'packpath'
).
Notez l'importance de la structure de votre dossier:
start
dossier contient des plugins qui seront chargés automatiquement au démarrage.opt
dossier contient des plug-ins "optionnels", chargés avec la packadd
commande.plugin
, autoload
, doc
, ...) sont celles que vous avez l' habitude dans les plug - ins.Voici un récapitulatif des dossiers:
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
Une fois que ces fichiers sont au bon endroit, ouvrir Vim chargera les plugins start
et rendra ceux-ci opt
disponibles avec :packadd
.
Maintenant, cette fonctionnalité peut-elle remplacer les gestionnaires de plug-ins existants?
Avertissement: Cette partie peut être un peu opinionated.
Je pense que l'approche de ce nouveau gestionnaire de paquets est vraiment différente de celle des gestionnaires de plugins auxquels nous étions habitués car il est conçu pour gérer un (ou plusieurs) archive (s) contenant des plugins.
Par défaut, le gestionnaire de paquets ne fournit pas de fonctionnalités permettant de mettre à jour vos plugins un par un, de les récupérer automatiquement à partir d'une adresse Github ou de sélectionner les plugins que vous souhaitez activer / désactiver.
Je ne suis pas sûr qu'il soit vraiment pratique de l'utiliser directement (notamment parce que la gestion des référentiels de contrôle de version imbriqués peut être une tâche pénible), mais c'est peut-être l'occasion de rendre les gestionnaires de plugins plus efficaces?
À présent, il est également possible d’imaginer déplacer les plug-ins existants pour adopter la structure requise par le gestionnaire de paquets et les gérer directement à partir du système de fichiers. Peut-être qu'un wrapper sera créé pour utiliser cette nouvelle fonctionnalité.
EDIT Comme suggéré par @Sato Katsura, voici une note sur la helptags
commande. Le commit Vim8 a introduit deux lignes dans la helptag
doc :
: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.
Ce qui signifie que le nouveau gestionnaire de paquets facilite la génération des helptags placés dans les archives utilisateur. Avec la commande unique, :helptags ALL
tous les helptags sont générés.
:helptags ALL
.
:helptag ALL
regarder et l'ajouter, merci pour la suggestion!
update
vos plugins ou à clean
eux (en supprimant les plugins inutilisés). Pour les points bonus, il utilise également la nouvelle fonctionnalité de contrôle des tâches pour effectuer plusieurs mises à jour en parallèle. Je pense que c'est vraiment prometteur, car cela améliore les packages intégrés avec un meilleur UX.
Pour développer le "peut-il remplacer les gestionnaires de plugins",
J'avais l'habitude d'utiliser Vundle, ce qui était fantastique, mais je l'ai maintenant remplacé par environ 18 lignes de bash.
Je trouve utile d’utiliser des sous-dossiers dans le répertoire des packs pour regrouper les plugins associés. Par exemple, "Syntax" ou "Ruby".
L'exemple bash pertinent est ci-dessous. Placez dans un fichier et exécutez-le.
Discussion supplémentaire sur le sujet à l’ adresse suivante : 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
La réponse fournie par @statox est très descriptive, mais elle peut être gênante pour un nouvel utilisateur, car il pourrait lire le fichier d'aide directement. Je veux décrire ce que vous devez faire dans les pointeurs.
Créer un pack/*/start
répertoire sous l’un des répertoires fournis par set packpath
. Je ai fait dans ~/.config/nvim/pack/*/start
. Notez que vous pouvez utiliser n'importe quel nom de répertoire à la place, *
mais vous ne pouvez pas l'omettre totalement, je ne sais pas pourquoi. Par exemple, vous pouvez utiliser le répertoire ~/.config/nvim/pack/foo/start
ou ~/.config/nvim/pack/bar/start
non ~/.config/nvim/pack/start
.
Allez dans le pack/*/start
répertoire et clonez le paquet là-bas.
:scriptnames
vérifiez si tout est chargé. Ne vous inquiétez pas si toutes les parties ne sont pas chargées, car certains fichiers sont censés être chargés après un raccordement, par exemple autoload/plugin.vim
.:helptags ALL
pour générer des balises pour tous les documents d'aide. Faites :helptags {dir}
pour générer des balises pour les documents d'aide sous le répertoire dir
. Par exemple, si vous insérez votre plugin ~/.config/nvim/pack/foo/plugin_name
, faites-le :helptags ~/.config/nvim/pack/foo/plugin_name/doc
. Cela va générer un tags
fichier dans le répertoire doc du plugin. Si vous supprimez le plug-in du répertoire, le fichier de balises aura disparu et vim ne trouvera pas le fichier d'aide. Vous n'avez donc pas besoin de désinstaller le fichier doc manuellement.Le nouveau format peut être considéré comme un équivalent de Pathogen. Il reste donc de la place pour un responsable pouvant télécharger les plug-ins souhaités. Quelques nouveaux gestionnaires de plugins exploitent ce nouveau format de pack, mais j'ai quand même conçu Vire, car ils vous laissent la migraine de la gérer vimrc
. Si vous avez plusieurs machines et que vous voulez la même configuration, Vire vous facilite la tâche.
package
fonctionnalité a pour but de mettre définitivement un terme aux vimballs et aux dinosaures associés, et non de rivaliser avec les gestionnaires de plug-ins modernes. C'est une solution de remplacement viablepathogen
, à condition de ne pas utiliserpathogen
des fonctionnalités plus obscures. Il ne tente pas de remplacer, par exempleVundle
. Le concept de paquet en tant que collection de plugins est bien pensé et potentiellement utile, mais je crains que personne ne l'utilise, car les gestionnaires de plugins modernes ne le supportent pas. Et les gestionnaires de plugins ne le supporteront pas car personne ne l'utilise. C'est un peu un problème d'œuf et de poule.