Vim 8 è stato rilasciato oggi e le note di rilascio menzionano una nuova funzionalità "pacchetto". Che cos'è e come dovrei usarlo?
Ancora più importante, sostituisce i buoni vecchi gestori di plugin ?
Vim 8 è stato rilasciato oggi e le note di rilascio menzionano una nuova funzionalità "pacchetto". Che cos'è e come dovrei usarlo?
Ancora più importante, sostituisce i buoni vecchi gestori di plugin ?
Risposte:
Prima di tutto, la documentazione pertinente può essere trovata con :h packages
la 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:
start
cartella contiene plugin che verranno caricati automaticamente all'avvio.opt
cartella contiene plugin "opzionali", caricati con il packadd
comando.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 start
e renderà opt
disponibili 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 helptags
comando. Il commit Vim8 ha introdotto due righe nel helptag
documento :
: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 ALL
vengono generati tutti gli helptag.
:helptags ALL
.
:helptag ALL
darò un'occhiata e aggiungerò, grazie per il suggerimento!
update
tuoi plugin o clean
loro (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.
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
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.
Creare una pack/*/start
directory 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/start
oppure ~/.config/nvim/pack/bar/start
no ~/.config/nvim/pack/start
.
Vai alla pack/*/start
directory e clona il pacchetto lì.
:scriptnames
verifica 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
.:helptags ALL
per 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 tags
file 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.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.
package
funzione ha lo scopo di mettere finalmente fine alle vimball e ai relativi dinosauri, non competere con i moderni gestori di plugin. È una valida alternativapathogen
, a condizione che non si faccia affidamento sullepathogen
funzionalità 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.