Cos'è la funzionalità del pacchetto Vim8 e come dovrei usarla?


Risposte:


74

Prima di tutto, la documentazione pertinente può essere trovata con :h packagesla versione di Vim8 appena compilata e qui su Github .

Una prima nota importante riguarda il vocabolario: in Vim8 un pacchetto è definito come questo:

Un pacchetto Vim è una directory che contiene uno o più plugin.

Ciò significa che il nuovo gestore pacchetti è stato creato per aiutare gli utenti a gestire tutti i loro plugin nello stesso archivio. Il documento elenca i seguenti vantaggi:

  • Un pacchetto può essere scaricato come archivio e decompresso nella propria directory. Pertanto, i file non vengono mescolati con i file di altri plugin. Ciò semplifica l'aggiornamento e la rimozione.

  • Un pacchetto può essere un repository git, mercurial, ecc. Questo rende davvero facile l'aggiornamento.

  • Un pacchetto può contenere più plugin che dipendono l'uno dall'altro.

  • Un pacchetto può contenere plugin caricati automaticamente all'avvio e caricati solo quando necessario :packadd.

Quindi l'idea è quella di creare una cartella contenente tutti i plugin con la seguente struttura:

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

La posizione della cartella è definita dall'opzione packpath(Vedi :h 'packpath').

Nota l'importanza della struttura della tua cartella:

  • La startcartella contiene plugin che verranno caricati automaticamente all'avvio.
  • La optcartella contiene plugin "opzionali", caricati con il packaddcomando.
  • Le sottocartelle ( plugin, autoload, doc, ...) sono quelli a cui siete abituati nelle plugin.

Ecco un riepilogo delle cartelle:

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

Una volta che questi file sono nel posto giusto, l'apertura di Vim caricherà i plugin starte renderà optdisponibili quelli con :packadd.


Ora, questa funzione può sostituire i gestori plug-in esistenti?

Disclaimer: questa parte può essere un po 'supponente.

Penso che l'approccio di questo nuovo gestore di pacchetti sia davvero diverso da quello dei gestori di plugin a cui eravamo abituati perché è fatto per gestire uno (o più) archivio (i) contenente alcuni plugin.

Immediatamente, il gestore pacchetti non fornisce funzionalità per aggiornare i plug-in uno a uno, recuperarli automaticamente da un indirizzo Github o selezionare i plug-in che si desidera abilitare / disabilitare.

Non sono sicuro che sarà davvero conveniente usarlo immediatamente (soprattutto perché gestire i repository di controllo della versione nidificata può essere un compito doloroso) ma forse è l'occasione per rendere i gestori di plugin più efficienti?

Ora è anche possibile immaginare di spostare i plugin esistenti per adottare la struttura richiesta dal gestore pacchetti e gestirli direttamente dal file system. Forse verrà creato un wrapper per utilizzare questa nuova funzionalità.


MODIFICA Come suggerito da @Sato Katsura ecco una nota sul helptagscomando. Il commit Vim8 ha introdotto due righe nel helptagdocumento :

: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.

Ciò significa che il nuovo gestore pacchetti facilita la generazione degli helptag inseriti nell'archivio utenti. Con il singolo comando :helptags ALLvengono generati tutti gli helptag.


11
Buon riassunto. La packagefunzione ha lo scopo di mettere finalmente fine alle vimball e ai relativi dinosauri, non competere con i moderni gestori di plugin. È una valida alternativa pathogen, a condizione che non si faccia affidamento sulle pathogenfunzionalità più oscure. Non ha alcun tentativo di sostituire, per esempio, Vundle. Il concetto di pacchetto come una raccolta di plugin è ben congegnato e potenzialmente utile, ma temo che nessuno lo userà perché i moderni gestori di plugin non lo supportano. E i gestori di plugin non lo supporteranno perché nessuno lo usa. È un po 'un problema con pollo e uova.
Sato Katsura,

2
Non correlato: potresti voler aggiungere una nota in merito :helptags ALL.
Sato Katsura,

1
@Sato grazie per la nota sulle vimball: dato che non le uso mai, non ci ho pensato, ma ora che me lo dici sembra abbastanza ovvio. Concordo con te sulla nota "nessuno lo userà", non ne sono davvero ottimista. Per la :helptag ALLdarò un'occhiata e aggiungerò, grazie per il suggerimento!
statox


4
minpac è un nuovo gestore di pacchetti per Vim 8 (e NeoVim). Si basa sui pacchetti di Vim 8, fornendo comandi ai updatetuoi plugin o cleanloro (rimuovendo i plugin inutilizzati). Per i punti bonus, utilizza anche la nuova funzione di controllo dei lavori per eseguire più aggiornamenti in parallelo. Penso che sia davvero promettente, perché migliora i pacchetti integrati con una UX migliore.
nelstrom,

11

Per espandere il "può sostituire i gestori dei plugin",

Usavo Vundle, il che era fantastico, ma ora l'ho sostituito con circa 18 linee di bash.

Trovo utile utilizzare le sottocartelle nella directory del pacchetto per raggruppare i plugin correlati. Ad esempio "Sintassi" o "Ruby".

L'esempio bash pertinente è di seguito. Inserire in un file ed eseguirlo.

Discussioni aggiuntive sull'argomento su: 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

4

La risposta fornita da @statox è molto descrittiva, ma per un nuovo utente che può distrarre, perché potrebbe leggere direttamente il file della guida. Voglio delineare cosa devi fare nei puntatori.

  1. Creare una pack/*/startdirectory in una qualsiasi delle directory fornite da set packpath. L'ho fatto ~/.config/nvim/pack/*/start. Si noti che è possibile utilizzare qualsiasi nome di directory desiderato al posto di *ma non è possibile ometterlo totalmente, non so perché. Ad esempio, è possibile utilizzare la directory ~/.config/nvim/pack/foo/startoppure ~/.config/nvim/pack/bar/startno ~/.config/nvim/pack/start.

  2. Vai alla pack/*/startdirectory e clona il pacchetto lì.

  3. Accendi n / vim e :scriptnamesverifica se tutto è caricato. Non preoccuparti se non tutte le parti vengono caricate, perché alcuni file devono essere caricati dopo alcuni hook, ad es autoload/plugin.vim.
  4. Per disinstallare, basta rimuovere la directory in cui è stato clonato il pacchetto. Non ho bisogno di fare altro.
  5. Fare :helptags ALLper generare tag per tutti i documenti della guida. Fare :helptags {dir}per generare tag per i documenti della guida nella directory dir. Ad esempio, se inserisci il tuo plugin ~/.config/nvim/pack/foo/plugin_name, allora fallo :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Ciò genererà un tagsfile nella directory doc del plugin. Se rimuovi il plug-in dalla directory, il file dei tag sparirà e vim non troverà il file della guida, quindi non è necessario disinstallare il file doc manualmente.

2

Il nuovo formato può essere pensato come un equivalente di Pathogen, quindi c'è ancora spazio per un manager che può scaricare i plugin che desideri. Ci sono alcuni nuovi gestori di plugin che sfruttano questo nuovo formato di pacchetto, ma ho ancora creato Vire dal momento che lasciano il mal di testa nel gestirlo vimrc. Se hai più macchine e desideri la stessa configurazione, Vire rende tutto più semplice.


Se hai più macchine WINDOWS e desideri la stessa configurazione ... FTFY
Dan J.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.