Qu'est-ce que la fonctionnalité de package Vim8 et comment dois-je l'utiliser?

Réponses:

74

Tout d’abord, vous trouverez la documentation pertinente :h packagessur 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:

  • Le startdossier contient des plugins qui seront chargés automatiquement au démarrage.
  • Le optdossier contient des plug-ins "optionnels", chargés avec la packaddcommande.
  • Les sous - dossiers ( 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 startet rendra ceux-ci optdisponibles 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 helptagscommande. Le commit Vim8 a introduit deux lignes dans la helptagdoc :

: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 ALLtous les helptags sont générés.

statox
la source
11
Bon résumé. Cette packagefonctionnalité 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 viable pathogen, à condition de ne pas utiliser pathogendes fonctionnalités plus obscures. Il ne tente pas de remplacer, par exemple Vundle. 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.
Sato Katsura
2
Non lié: vous pouvez ajouter une note à propos de :helptags ALL.
Sato Katsura
1
@Sato merci pour la note sur les vimballs: comme je ne les ai jamais utilisées, je ne les ai pas utilisées, mais maintenant que vous en parlez, cela semble assez évident. Je suis d'accord avec vous sur la note "personne ne l'utilisera", je ne suis pas vraiment optimiste à ce sujet. Pour le :helptag ALLregarder et l'ajouter, merci pour la suggestion!
statox
J'ai déplacé la discussion hors sujet pour discuter .
Martin Tournoij
4
minpac est un nouveau gestionnaire de paquets pour Vim 8 (et NeoVim). Il repose sur les paquets de Vim 8, fournissant des commandes à updatevos plugins ou à cleaneux (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.
nelstrom
11

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
Came
la source
4

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.

  1. Créer un pack/*/startré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/startou ~/.config/nvim/pack/bar/startnon ~/.config/nvim/pack/start.

  2. Allez dans le pack/*/startrépertoire et clonez le paquet là-bas.

  3. Lancez n / vim et :scriptnamesvé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.
  4. Pour désinstaller, supprimez simplement le répertoire dans lequel vous avez cloné le package. Pas besoin de faire autre chose.
  5. Faire :helptags ALLpour 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 tagsfichier 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.
Klaus
la source
2

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.

génotrance
la source
Si vous avez plusieurs machines WINDOWS et que vous voulez la même config ... FTFY
Dan J.