¿Cuál es la diferencia entre los administradores de complementos vim?


Respuestas:


142

vim-plug es una buena alternativa a Vundle, hace cosas un poco diferentes desde un punto de vista técnico, lo que debería hacerlo más rápido ( ver esto ). Tiene la mayoría (¿o todas?) De las características de Vundle.

  • Procedimiento de actualización paralelo para Vim con cualquiera de +ruby, +pythono Neovim. Vuelve al modo secuencial usando Vimscript si no hay ninguno disponible.
  • Carga diferida, para un inicio más rápido ( ver esto ).
  • Instalar complementos.
  • Actualizar complementos.
  • Revisar / deshacer actualizaciones.
  • Admite sistemas OSX, Linux y UNIX, y MS Windows.
  • Ganchos posteriores a la actualización, por ejemplo, recompilar automáticamente YCM

Para comenzar a usarlo:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Y en tu vimrc:

call plug#begin()
Plug 'tpope/vim-sensible'

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
call plug#end()

Entonces da la orden

:PlugInstall

para instalar los complementos enumerados.


1
Gracias por la recomendación; Me he resistido a los cargadores antes de esto porque me gusta mi tiempo de carga rápido. La única cosa no obvia que tuve que investigar fue :PlugInstallsobre un nuevo complemento; incluso los documentos oficiales oscurecen esto un poco.
msw

77
Si bien me gusta vim-plug, tenga en cuenta que cambia algunos valores predeterminados de vim que puede encontrar sorprendentes / confusos github.com/junegunn/vim-plug/issues/379
laktak

Para Windows, vim tiene un número de versión de carpeta vim , como vim81 para vim 8.1. En el primer paso cuando use curl, asegúrese de que la carpeta sea ..\vim81\autoload\..y no ..\.vim\autoload\...
Stephen Jacob

56

El patógeno es simple. Esencialmente solo hace:

  • complementos de carga automática desde una carpeta
  • generar etiquetas de ayuda para estos complementos

Pros:

  • minimalista

Contras:

  • todo lo demás hecho manualmente (instalación, actualización, eliminación, etc.)
  • sin carga perezosa

Para instalarlo descarga pathogen.vima ~/.vim/autoload:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Y agregue a su .vimrc:

call pathogen#infect()
call pathogen#helptags() "If you like to get crazy :)

Si no te gusta enloquecer, solo llama :Helptagscuando lo necesites.

Los complementos se agregan a ~/vim/bundle.


20
Para ser claros, el patógeno no es un administrador de complementos. Todo lo que hace es administrar el runtimepath. Eso es. Cualquier complemento que agregue a ~ / .vim / bundle (es decir, la ubicación predeterminada, puede cambiar esto), agrega los archivos del complemento al runtimepath de vim para que sean accesibles. La instalación, actualización y eliminación manual no es realmente una desventaja si no tiene tantos complementos instalados. Además, al actualizar complementos, puede elegir recuperar solo un subconjunto de los cambios y no actualizar a la última versión de un complemento, lo que le da mucho control.
akshay

1
@AkshayHegde Sí, una vez que comencé a escribir la respuesta de Vundle, tuve que volver y editar el "administrador de complementos" de esta respuesta. Secundado por la estafa, es por eso que sigo usándolo en lugar de cualquier otra cosa.
muru

1
vim-pandemic es una buena adición a Pathogen. Maneja los repositorios remotos detrás de los complementos, dejando que Pathogen maneje el runtimepath. Esto significa que uno necesita dos herramientas, pero para tareas dispares que "deberían" manejarse por separado. La ventaja de Pathogen + Pandemic que encontré más convincente: no es necesario tratar con submódulos git para los paquetes.
jalanb

2
Yo uso el patógeno como mi cargador de complementos. Pero uso submódulos git para controlar las versiones de los complementos individuales. Por lo tanto, su enfoque minimalista funciona bien para mi caso de uso. ¿Cómo manejan los otros gerentes las actualizaciones de versiones y complementos?
Martin York

2
@JaDogg Oh, eso es de README : "Normalmente, Vim espera que ejecutes: helptags en cada directorio con documentación (por ejemplo, helptags ~ / .vim / doc). Proporcionado con pathogen.vim es un comando: Helptags que hace esto en cada directorio de tu 'runtimepath'. Si realmente quieres volverte loco, incluso podrías invocar etiquetas de ayuda en tu vimrc. No me gusta volverme loco ". Yo diría que si tiene muchos complementos, esto podría retrasar un poco el inicio. Y realmente no necesita ejecutarlo en cada inicio, una vez para cada instalación / actualización del complemento debería ser suficiente.
muru

43

Vundle es más complejo. Es un gestor de paquetes à la apto yumpara complementos. Puede:

  • buscar un índice de complemento
  • actualizar complementos
  • generar etiquetas de ayuda automáticamente
  • mantener, pero no usar, complementos en la carpeta de carga automática
  • limpiar tales complementos no utilizados
  • Funciona en Linux, OSX y MS Windows

Instalar:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Y luego agregue a su .vimrc:

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" more Plugin commands
" ...
call vundle#end()            " required
filetype plugin indent on    " required

Para instalar un complemento, use el Plugincomando en .vimrc(más ejemplos en el archivo README de Github):

" plugin on Github
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'

Y luego llame :PluginInstalldesde .vim(o vim +PluginInstall +qall).


El archivo README de NeoBundle al que se ha vinculado dice que el proyecto ahora está en desuso a favor de github.com/Shougo/dein.vim
Jonathan Hartley

@JonathanHartley, ¿el "oscuro"? Supongo que debería haberlo visto venir.
muru

13

dein.vim : Como seguimiento de esta pregunta , agregaré aquí el administrador de complementos creado por el conocido Shougo.

Según el archivo README, el complemento tiene las siguientes dependencias:

  • Vim >7.4 or neovim: si bien mantener Vim actualizado es algo bueno, puede ser problemático para algunos usuarios que las versiones anteriores no sean compatibles
  • git: que es bastante común para un administrador de paquetes
  • rsync: que no es tan común como git

El autor afirma que es más rápido que NeoBundle. Se puede encontrar un punto de referencia en la página Léame del proyecto .

Un concepto original de este administrador de plugins es que no proporciona ninguna orden, pero sólo funciona: por ejemplo, para actualizar sus plugins no se puede usar algo como :PlugUpdate, usted tiene que llamar: :call dein#update(). Para ser honesto, no he encontrado una explicación de esta elección de diseño.

Además, alguien creó un complemento que proporciona estos comandos "faltantes". No tengo idea si esta es una buena idea o si va en contra de la idea principal del administrador de complementos, pero el autor lo menciona en las preguntas frecuentes del archivo doc.

Dein.vim admite la obtención de complementos desde Github (con un acceso facilitado a complementos desde vimscript.org) y desde directorios locales.

El administrador de complementos proporciona algunas características clásicas como actualizar y deshabilitar los complementos. También permite la ejecución de ganchos en el momento de la instalación.

Tenga en cuenta que, según las preguntas frecuentes, parece que tiene que crear manualmente las etiquetas de ayuda de los complementos que instala.

Un punto interesante es que el autor quiere que dein.vim sea fácil de probar y mantener, por lo que el repositorio también contiene algunos scripts de prueba.

Finalmente, diría que este administrador de complementos parece estar diseñado para ser ligero y rápido, lo cual es interesante, pero creo que es menos fácil de usar que vim-plug o Vundle , por ejemplo.


Ah, también, Shougo describe a dein.vim como un "Administrador de plugins de Vim / Neovim con energía oscura". Si alguien sabe lo que significa, no dude en editar esta respuesta: Tengo curiosidad ;-)


1
"Dark powered" es una frase que encontrarás en los complementos vim de Shougo que tienen soporte o son solo para NeoVim.
Yonsy Solis

8
Creo que la frase "Dark powered" proviene de los "usuarios de Light Vim", aquellos que solo usan las funciones predeterminadas y los "usuarios de Dark Vim", aquellos que intentan usarlo como IDE o al menos usan muchos complementos y tienen muchos de líneas agregadas a su archivo vimrc (más sobre esto aquí en la presentación de Shougo- slideshare.net/Shougo/lets-talk-about-neovim - diapositiva 6)
lewiatan

1
@lewiatan: Gracias, creo que obtienes la respuesta correcta. (Presentación interesante de Shougo por cierto)
statox

1
@statox Shougo afirma : "Dein.vim también abandona el uso de comandos a favor de la llamada a funciones, lo que también puede contribuir al rendimiento (aunque no estoy seguro)".
Alexej Magura

1
@statox, Lulz, probablemente esas no son las palabras de Shougo, entonces, no me había dado cuenta de que no era su blog.
Alexej Magura

13

Tanto Vim 8.0 como Neovim tienen su propio administrador de paquetes incorporado. En Vim 8.0, cree los siguientes directorios:, .vim/pack/*/startdonde *está cualquier nombre que quiera usar; por ej .vim/pack/jimmy/start.

Clone su complemento en el directorio de inicio tal como lo haría si estuviera utilizando el patógeno.

Con Neovim, los directorios son un poco más largos:

.local/share/nvim/site/pack/*/start. A partir de ahí, haz lo mismo que para Vim.

No hay necesidad de otro administrador de complementos.

En Vim o Neovim, corre :h packagespor un poco más de detalle. Lea la parte sobre los colores porque son diferentes, aunque no mucho. No necesita instrucciones adicionales en .vimrcsus nvim/init.vimarchivos.

Espero que ayude.


8

Me gusta especialmente VAM por su autodespliegue: todo lo que necesitas es tu .vimrcy luego iniciar vim.

Por lo tanto, no necesita la To Installlínea utilizada por la mayoría de los demás administradores de complementos (el primer paso para instalar el administrador de complementos en sí).


6

En lo que a mí respecta, quiero el administrador de complementos que utilizo para admitir dependencias.

Las razones son que mantengo varios complementos y tengo muchas interdependencias: todos usan una biblioteca genérica, el motor de plantillas / fragmentos es usado por el conjunto de aplicaciones de C ++, el complemento de refactorización usa también el complemento de biblioteca ctags , y así. Requerir que el usuario final ejecute hasta 10 líneas para instalar los complementos que le interesan no me parece una buena solución.

Hasta ahora, solo conozco dos de estos complementos: vim-addon-manager y NeoBundle . VAM ha bifurcado su código de base de datos a vim-pi después de muchos intercambios en la lista de correo oficial de vim. La idea era que NeoBundle (y cualquier otro complemento interesado en administrar dependencias) eventualmente podría explotar vim-pi.

Recientemente me encontré con vim-taste que también maneja dependencias. Sobre el tema, verifica las versiones de complementos para instalar la correcta.

Nota: desde mi respuesta inicial,

  • El desarrollo de NeoBundle se ha detenido;
  • y aunque vim-pi actualiza regularmente su base de datos desde complementos en vim.org, y que VAM todavía se puede usar para expresar dependencias, parece que ya no es posible agregar un alias a la base de datos de vim-pi: MR / PR ya no se fusionan

AFAIK, ninguno de estos complementos clona / instala / actualiza complementos en segundo plano / paralelo. Como no instalo un nuevo entorno vim, ni actualizo los complementos que he instalado una vez al mes, sinceramente, no me importa. Por supuesto 'helptags', se actualizan , se encargan 'rtp', etc.


vim-plugEl archivo README tiene un ejemplo que dice "Dependencias de grupo". ¿Has probado eso o difiere de los métodos de VAM / NeoBundle?
muru

He echado de menos las dependencias de grupo en la documentación de vim-plug. Sin embargo, sí vi que eliminaron su intento de admitir dependencias de la base del código. En cuanto a las dependencias de grupo, no veo cómo puede ayudar. Las dependencias no deben ser declaradas por el usuario final. Deben ser declarados por los escritores de complementos. Si observa el complemento lh-cpp y observa detenidamente, verá que las dependencias no son algo lineal. Es un gráfico orientado, que debe ser acíclico para evitar problemas.
Luc Hermitte

Hasta ahora, he estado usando VAM durante más de una década y estoy contento con eso. Sin embargo, he usado vim-flavour ya que es mucho más fácil de integrar desde travis, para probar mis complementos. Y desafortunadamente, ambos usan una sintaxis diferente para declarar dependencias.
Luc Hermitte

1
FYI: El desarrollo de NeoBundle se ha detenido (desde el 23 de febrero de 2016). Recomienda su sucesor Dein.vim (por el mismo autor) en su lugar.
Peter V. Mørch

3

La mayoría de estos administradores de complementos hacen un gran trabajo al administrar complementos, pero te dejan el dolor de cabeza de administrarlos vimrc. Si tiene varias máquinas y desea la misma configuración, Vire lo hace súper fácil. No necesita git o descifrar submódulos ni ningún esfuerzo adicional para configurar o migrar.

  • Instale Python, que es lo que la mayoría de los complementos Vim modernos están escritos y requeridos de todos modos
  • pip install vire
  • Publique su existente vimrcen Github como una esencia y manténgalo allí
  • Si está en Windows, vire -ipara instalar la última versión de Vim o (Neovim con -i -n)
  • Elimine cualquier llamada de función de complemento existente y defina llamadas comentadas para instalar cualquier complemento " Plug 'tpope/vim-unimpaired'
  • vire gistID

Luego, ejecute virecada vez que desee vimrcque se actualicen sus complementos o también -ipara actualizar la aplicación.

Vire aprovecha la función de Vim / Neovim packpara cargar complementos. También puede continuar usando su administrador de complementos existente, pero use Vire para instalar solo Vim, the vimrcy el administrador de complementos si lo prefiere.


1

Para las personas que desean un administrador de complementos completo que use Pathogen, también existe apt-vim. Puede instalarlo con curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (como se describe aquí: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Una vez instalado, puede escribir apt-vim installseguido del nombre del repositorio de paquetes, similar al administrador de paquetes apt de Ubuntu.


1
Esta es esencialmente una respuesta de solo enlace. Si pudiera entrar en detalles sobre cómo instalar y usar apt-vim, sería aceptable.
Tumbler41

Lo actualicé. Realmente pensé que debería ser un comentario en la publicación sobre Patógenos, pero no tengo suficientes puntos para hacer comentarios
Melanie Day

1
Falta el enlace al complemento. También de nuevo un complemento que sugiere curl URL |sh. Nunca sugeriría a nadie que ejecute algún código aleatorio desde Internet. Realmente es un mal habito de seguridad.
Christian Brabandt

0

Estaba buscando una forma de usar pathogenpero actualizar fácilmente y hacerlo portátil, por lo que quizás un bashscript podría ser útil (usando la vim-plugfuncionalidad):

#!/bin/sh

# inspired by https://github.com/thoughtbot/dotfiles/blob/master/hooks/post-up

if [ ! -e "$HOME"/.vim/autoload/pathogen.vim ]; then
  curl -fLo "$HOME"/.vim/autoload/pathogen.vim --create-dirs \
      https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
fi

if [ -e "$HOME"/.vim/autoload/plug.vim ]; then
  vim -E -s +PlugUpgrade +qa
else
  curl -fLo "$HOME"/.vim/autoload/plug.vim --create-dirs \
      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
fi
vim -u "$HOME"/.vimrc.bundles +PlugUpdate +PlugClean! +qa

Y luego un ejemplo .vimrc.bundle:

"installed via the Githubs
call plug#begin('~/.vim/bundle')
Plug 'bling/vim-airline'
Plug 'scrooloose/syntastic'
Plug 'scrooloose/nerdtree'
Plug 'tpope/vim-fireplace'
Plug 'vim-scripts/paredit.vim'
" etc

call plug#end()

"disable vim-plug sugar-- actual config should be set via .vimrc
filetype plugin indent off 
syntax on

1
¿Puedes agregar algunos detalles a esto? La pregunta principal que plantea OP es "¿Puede alguien darme una breve descripción de las diferencias [en los administradores de paquetes] para que yo pueda decidir cuál funciona mejor para mí"? ¿Cómo su respuesta ayuda a responder eso? ¿Qué está agregando al patógeno específicamente que no tiene? Ese tipo de cosas.
Capa B el