¿Qué es la función del paquete Vim8 y cómo debo usarla?


Respuestas:


74

En primer lugar, la documentación relevante se puede encontrar :h packagesen la versión Vim8 recién compilada y aquí en Github .

Una primera nota importante es sobre el vocabulario: en Vim8 un paquete se define así:

Un paquete Vim es un directorio que contiene uno o más complementos.

Esto significa que el nuevo administrador de paquetes se creó para ayudar a los usuarios a administrar todos sus complementos en el mismo archivo. El documento enumera las siguientes ventajas:

  • Un paquete se puede descargar como un archivo y desempaquetado en su propio directorio. Por lo tanto, los archivos no se mezclan con archivos de otros complementos. Eso facilita la actualización y eliminación.

  • Un paquete puede ser un repositorio git, mercurial, etc. Eso hace que sea realmente fácil de actualizar.

  • Un paquete puede contener múltiples complementos que dependen unos de otros.

  • Un paquete puede contener complementos que se cargan automáticamente al inicio y otros que solo se cargan cuando es necesario :packadd.

Entonces, la idea es crear una carpeta que contenga todos los complementos con la siguiente estructura:

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

El emplazamiento de la carpeta está definido por la opción packpath(Ver :h 'packpath').

Tenga en cuenta la importancia de la estructura de su carpeta:

  • La startcarpeta contiene complementos que se cargarán automáticamente al inicio.
  • La optcarpeta contiene complementos "opcionales", cargados con el packaddcomando.
  • Las subcarpetas ( plugin, autoload, doc, ...) son los que estamos acostumbrados en los plugins.

Aquí hay un resumen de las carpetas:

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 vez que estos archivos estén en el lugar correcto, al abrir Vim se cargarán los complementos starty se habilitarán los que optestén disponibles :packadd.


Ahora, ¿puede esta característica reemplazar a los administradores de complementos existentes?

Descargo de responsabilidad: esta parte puede ser un poco obstinada.

Creo que el enfoque de este nuevo administrador de paquetes es realmente diferente al de los administradores de complementos a los que estábamos acostumbrados porque está hecho para administrar uno (o varios) archivos que contienen algunos complementos.

Fuera de la caja, el administrador de paquetes no proporciona funciones para actualizar sus complementos uno por uno, para buscarlos automáticamente desde una dirección de Github o para seleccionar los complementos que desea habilitar / deshabilitar.

No estoy seguro de que sea realmente conveniente usarlo de inmediato (especialmente porque manejar repositorios de control de versiones anidadas puede ser una tarea dolorosa), pero ¿tal vez esta sea la ocasión para hacer que los administradores de complementos sean más eficientes?

Ahora también es posible imaginar mover los complementos existentes para adoptar la estructura requerida por el administrador de paquetes y administrarlos directamente desde el sistema de archivos. Tal vez se cree un contenedor para usar esta nueva característica.


EDITAR Como lo sugiere @Sato Katsura, aquí hay una nota sobre el helptagscomando. El commit Vim8 introdujo dos líneas en el 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.

Lo que significa que el nuevo administrador de paquetes facilita la generación de las etiquetas de ayuda incluidas en el archivo del usuario. Con el comando único :helptags ALLse generan todas las etiquetas de ayuda.


11
Buen resumen La packagefunción está destinada a poner fin a las vimballs y los dinosaurios relacionados, no a competir con los administradores de complementos modernos. Es un reemplazo viable para pathogen, siempre que no confíe en pathogenlas características más oscuras. No hace ningún intento de sustituir, por ejemplo, Vundle. El concepto de paquete como una colección de complementos está bien pensado y es potencialmente útil, pero me temo que nadie lo usará porque los administradores de complementos modernos no lo admiten. Y los administradores de complementos no lo admitirán porque nadie lo usa. Es un problema de huevo y gallina.
Sato Katsura

2
Sin relación: es posible que desee agregar una nota sobre :helptags ALL.
Sato Katsura

1
@Sato, gracias por la nota sobre las vimballs: como nunca las uso, no lo pensé, pero ahora que lo mencionas parece bastante obvio. Estoy de acuerdo con usted acerca de la nota "nadie lo usará". No soy realmente optimista al respecto. Para :helptag ALLechar un vistazo y añadirlo, gracias por la sugerencia!
statox


44
minpac es un nuevo administrador de paquetes para Vim 8 (y NeoVim). Se construye sobre los paquetes de Vim 8, proporcionando comandos a updatesus complementos o a cleanellos (eliminando los complementos no utilizados). Para los puntos de bonificación, también utiliza la nueva función de control de trabajos para realizar múltiples actualizaciones en paralelo. Creo que es realmente prometedor, porque mejora los paquetes integrados con una mejor experiencia de usuario.
nelstrom

11

Para ampliar el "puede reemplazar a los administradores de complementos",

Solía ​​usar Vundle, que era fantástico, pero ahora lo he reemplazado con 18 o más líneas de bash.

Me resulta útil usar subcarpetas en el directorio del paquete para agrupar complementos relacionados. Por ejemplo, "sintaxis" o "rubí".

El ejemplo de bash relevante está debajo. Colocar en un archivo y ejecutarlo.

Discusión adicional sobre el tema en: 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 respuesta proporcionada por @statox es muy descriptiva, pero para un nuevo usuario puede ser una distracción, ya que podrían leer el archivo de ayuda directamente. Quiero resumir lo que necesita hacer en punteros.

  1. Crear pack/*/startdirectorio bajo cualquiera de los directorios proporcionados por set packpath. Lo hice en ~/.config/nvim/pack/*/start. Tenga en cuenta que puede usar cualquier nombre de directorio que desee en lugar de *pero no puede omitirlo por completo, no sé por qué. Por ejemplo, puede usar el directorio ~/.config/nvim/pack/foo/starto ~/.config/nvim/pack/bar/startno ~/.config/nvim/pack/start.

  2. Vaya al pack/*/startdirectorio y clone el paquete allí.

  3. Encienda n / vim y haga :scriptnamespara verificar si todo está cargado. No se preocupe si no se cargan todas las partes, ya que algunos archivos deben cargarse después de algún enlace, por ejemplo autoload/plugin.vim.
  4. Para desinstalar, simplemente elimine el directorio donde clonó el paquete. No necesito hacer nada más.
  5. Haga :helptags ALLpara generar etiquetas para todos los documentos de ayuda. Hacer :helptags {dir}para generar etiquetas para los documentos de ayuda en el directorio dir. Por ejemplo, si coloca su complemento ~/.config/nvim/pack/foo/plugin_name, entonces hágalo :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Eso generará un tagsarchivo en el directorio doc del complemento. Si elimina el complemento del directorio, el archivo de etiquetas desaparecerá y vim no encontrará el archivo de ayuda, por lo que no necesita desinstalar el archivo doc manualmente.

2

El nuevo formato puede considerarse como un equivalente de patógeno, por lo que todavía hay espacio para un administrador que pueda descargar los complementos que desee. Hay algunos nuevos administradores de complementos que aprovechan este nuevo formato de paquete, pero aún así hice Vire ya que te dejan el dolor de cabeza de administrarlo vimrc. Si tiene varias máquinas y desea la misma configuración, Vire lo hace súper fácil.


Si tiene varias máquinas WINDOWS y desea la misma configuración ... FTFY
Dan J.