Qual é a diferença entre os gerenciadores de plugins do vim?

197

Eu estive analisando os diferentes gerenciadores de pacotes do vim e o que decidi usar o vim-plug, mas vi outros como patógenos e vundle e, sinceramente, não sei qual é a diferença.

Alguém pode me dar uma breve visão geral das diferenças para que eu possa decidir qual funciona melhor para mim?

Abobrinha
fonte
11
stackoverflow.com/questions/2458398/…
Ciro Santilli escreveu:

Respostas:

142

O vim-plug é uma boa alternativa ao Vundle, ele faz as coisas um pouco diferentes do ponto de vista técnico, o que deve torná-lo mais rápido ( veja isso ). Possui a maioria (ou todos?) Dos recursos do Vundle.

  • Procedimento de atualização paralela para Vim com qualquer um +ruby, +pythonou Neovim. Volta ao modo seqüencial usando o Vimscript se nenhum estiver disponível.
  • Carregamento lento, para inicialização mais rápida ( veja isso ).
  • Instale plugins.
  • Atualize plugins.
  • Revisar / reverter atualizações.
  • Suporta sistemas OSX, Linux e UNIX e MS Windows.
  • Ganchos pós-atualização, por exemplo, recompilar automaticamente o YCM

Para começar a usá-lo:

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

E no seu vimrc:

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

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

Então dê o comando

:PlugInstall

para instalar os plugins listados.

gjg
fonte
11
Obrigado pela recomendação; Resisti aos carregadores antes disso porque gosto dos meus horários de carregamento compactados. A única coisa não óbvia que tive que pesquisar foi :PlugInstallem um novo plugin; até os documentos oficiais obscurecem isso um pouco.
msw
7
enquanto eu gosto de vim-plug, estar ciente de que ele muda alguns padrões vim que você pode achar surpreendente / confundindo github.com/junegunn/vim-plug/issues/379
laktak
Para Windows, o vim possui um número de versão da pasta vim , como o vim81 para o vim 8.1. Na primeira etapa ao usar o enrolamento, verifique se a pasta está ..\vim81\autoload\..e não ..\.vim\autoload\...
Stephen Jacob
56

O patógeno é simples. Essencialmente, ele apenas faz:

  • carregar automaticamente plugins de uma pasta
  • gerar tags de ajuda para esses plug-ins

Prós:

  • minimalista

Contras:

  • tudo o mais feito manualmente (instalação, atualização, remoção etc.)
  • sem carregamento preguiçoso

Para instalá-lo, faça o download pathogen.vimpara ~/.vim/autoload:

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

E adicione ao seu .vimrc:

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

Se você não gosta de ficar louco, ligue apenas :Helptagsquando precisar.

Os plugins são então adicionados a ~/vim/bundle.

muru
fonte
20
Só para esclarecer, o pathogen não é um gerenciador de plugins. Tudo o que faz é gerenciar o caminho de execução. É isso aí. Qualquer plug-in que você adicionar ao ~ / .vim / bundle (ou seja, o local padrão, você pode alterar isso), ele adiciona os arquivos do plug-in ao runtimepath do vim, para que fiquem acessíveis. A instalação, atualização e remoção manualmente não é realmente um engodo, se você não tiver tantos plugins instalados. Além disso, ao atualizar plug-ins, você pode optar por buscar apenas um subconjunto das alterações e não atualizar para a versão mais recente de um plug-in, que oferece muito controle.
akshay
11
@AkshayHegde Sim, depois que comecei a escrever a resposta do Vundle, tive que voltar e editar o "gerenciador de plugins" desta resposta. Destacado sobre o golpe, é por isso que continuo a usá-lo em vez de qualquer outra coisa.
muru 5/02
11
vim-pandemic é uma boa adição ao Pathogen. Ele lida com os repositórios remotos atrás dos plugins, deixando o Pathogen para lidar com o caminho de execução. Isso significa que precisamos de duas ferramentas, mas para tarefas díspares que "devem" ser tratadas separadamente. A vantagem do Pathogen + Pandemic que eu achei mais convincente: não há necessidade de lidar com submódulos git para os pacotes.
jalanb
2
Eu uso patógeno como meu carregador de plugins. Mas eu uso submódulos git para controlar as versões dos plugins individuais. Portanto, sua abordagem minimalista funciona bem para o meu caso de uso. Como os outros gerentes lidam com atualizações de versão e plug-in.
Martin York
2
@JaDogg Oh, isso é do README : "Normalmente, o Vim espera que você execute: helptags em cada diretório com documentação (por exemplo: helptags ~ / .vim / doc). Fornecido com o pathogen.vim é o comando a: Helptags que faz isso em todos os diretórios do seu 'runtimepath'. Se você realmente quer enlouquecer, pode até invocar Helptags no seu vimrc. Não gosto de enlouquecer. " Eu diria que, se você tiver muitos plugins, isso pode atrasar um pouco a inicialização. E você realmente não precisa executá-lo em toda inicialização, uma vez para cada instalação / atualização do plugin deve ser suficiente.
muru 27/05
43

Vundle é mais complexo. É um gerenciador de pacotes à la aptou yumpara plugins. Pode:

  • pesquisar um índice de plug-in
  • atualizar plugins
  • gerar helptags automaticamente
  • manter, mas não usar, plugins na pasta de carregamento automático
  • limpe esses plugins não utilizados
  • Funciona em Linux, OSX e MS Windows

Para instalar:

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

E depois adicione ao seu .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 um plug-in, use o Plugincomando em .vimrc(mais exemplos no Github README):

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

E depois ligue :PluginInstallde .vim(ou vim +PluginInstall +qall).

muru
fonte
O NeoBundle README de ter ligado a diz que o projeto está agora depreciado em favor do github.com/Shougo/dein.vim
Jonathan Hartley
@JonathanHartley, o "sombrio"? Acho que deveria ter previsto isso.
muru
13

dein.vim : Como acompanhamento desta questão , adicionarei aqui o gerenciador de plugins criado pelo conhecido Shougo.

De acordo com o README, o plug-in tem as seguintes dependências:

  • Vim >7.4 or neovim: embora seja bom manter o Vim atualizado, pode ser problemático para alguns usuários que as versões anteriores não sejam suportadas
  • git: o que é bastante comum para um gerenciador de pacotes
  • rsync: o que não é tão comum quanto o git

O autor afirma que é mais rápido que o NeoBundle. Uma referência pode ser encontrada na página leia-me do projeto .

Um conceito original deste gerente plugin é que ele não fornece quaisquer comandos, mas apenas funções: por exemplo, para atualizar seus plugins que você não pode usar algo como :PlugUpdate, você tem que chamar: :call dein#update(). Para ser sincero, não encontrei uma explicação dessa opção de design.

Além disso, alguém criou um plugin que fornece esses comandos "ausentes". Não tenho idéia se essa é uma boa ideia ou se é contrária à idéia principal do gerenciador de plugins, mas o autor menciona isso nas perguntas frequentes do arquivo doc.

O Dein.vim suporta a obtenção de plugins do Github (com acesso facilitado aos plugins do vimscript.org) e de diretórios locais.

O gerenciador de plugins fornece alguns recursos clássicos, como atualizar e desativar os plugins. Também permite a execução de ganchos no momento da instalação.

Observe que, de acordo com as Perguntas frequentes, parece que você precisa criar manualmente as helptags dos plug-ins instalados.

Um ponto interessante é que o autor deseja que o dein.vim seja fácil de testar e manter, para que o repositório também contenha alguns scripts de teste.

Finalmente, eu diria que esse gerenciador de plugins parece ter sido projetado para ser leve e rápido, o que é interessante, mas acho que é menos fácil de usar do que o vim-plug ou o Vundle , por exemplo.


Ah, também, Shougo descreve o dein.vim como um "gerenciador de plugins Vim / Neovim com alimentação escura" se alguém souber o que significa, fique à vontade para editar esta resposta: Estou curioso ;-)

statox
fonte
11
"Dark powered" é uma frase que você encontrará nos plugins vim da Shougo que têm suporte / ou são apenas para o NeoVim.
Yonsy Solis
8
Eu acho que essa frase "Dark powered" vem dos "usuários do Light Vim" - aqueles que usam apenas os recursos padrão e os "usuários do Dark Vim" - aqueles que tentam usá-lo como IDE ou pelo menos usam muitos plugins e têm muitos de linhas adicionado ao seu arquivo vimrc (mais sobre isso aqui em Apresentação de de Shougo slideshare.net/Shougo/lets-talk-about-neovim - diapositivo 6)
Lewiatan
11
@lewiatan: Obrigado, acho que você obtém a resposta certa. (Apresentação interessante de Shougo)
statox
11
@statox Shougo afirma : "O Dein.vim também descarta o uso de comandos em favor da chamada de funções, o que também pode contribuir para o desempenho (embora não tenha certeza)."
Alexej Magura
11
@statox, Lulz, não, essas provavelmente não são as palavras de Shougo, então eu não tinha percebido que não era o blog dele.
Alexej Magura
13

O Vim 8.0 e o Neovim têm seu próprio gerenciador de pacotes embutido. No Vim 8.0, crie os seguintes diretórios:, .vim/pack/*/startonde *está qualquer nome que você deseja usar; por exemplo .vim/pack/jimmy/start.

Clone seu plug-in no diretório inicial da mesma maneira que faria se estivesse usando patógeno.

Com o Neovim, os diretórios são um pouco mais demorados:

.local/share/nvim/site/pack/*/start. A partir daí, faça o mesmo que para o Vim.

Não há necessidade de outro gerenciador de plugins.

No Vim ou Neovim, corra :h packagespara um pouco mais de detalhes. Leia a parte sobre cores porque elas são diferentes, embora não muito. Você não precisa de instruções extras em .vimrcseus nvim/init.vimarquivos.

Espero que ajude.

David
fonte
8

Gosto especialmente do VAM por sua auto-implantação: tudo que você precisa é seu .vimrce, em seguida, inicie o vim.

Portanto, você não precisa da To Installlinha usada pela maioria dos outros gerenciadores de plugins (a primeira etapa da instalação do gerenciador de plugins).

RSabet
fonte
6

No que me diz respeito, quero o gerenciador de plugins que uso para suportar dependências.

As razões são que eu estou mantendo vários plugins e tenho muitas interdependências: uma biblioteca genérica é usada por todos, o mecanismo de template / snippet é usado pelo pacote C ++, o plug-in de refatoração também usa o ctags library-plugin , e assim por diante. Exigir que o usuário final execute até 10 linhas para instalar os plugins nos quais está interessado não me parece uma boa solução.

Até agora, só conheço dois desses plugins: vim-addon-manager e NeoBundle . O VAM bifurcou seu código de banco de dados para o vim-pi após muitas trocas na lista de discussão oficial do vim. A idéia era que o NeoBundle (e qualquer outro plugin interessado em gerenciar dependências) pudesse eventualmente explorar o vim-pi.

Recentemente, deparei com vim-flavor, que também lida com dependências. No assunto, ele verifica as versões do plugin para instalar o correto.

Nota: Desde a minha resposta inicial,

  • O desenvolvimento do NeoBundle parou;
  • e enquanto o vim-pi atualiza regularmente seu banco de dados a partir de plugins no vim.org, e que o VAM ainda pode ser usado para expressar dependências, não é mais possível adicionar alias ao banco de dados do vim-pi: o MR / PR não está mais mesclado

AFAIK, nenhum desses plugins clona / instala / atualiza plugins em segundo plano / paralelo. Como não instalo um novo ambiente vim, nem atualizo os plugins que instalei uma vez por mês, sinceramente, não me importo. É claro que eles atualizam 'helptags', cuidam 'rtp'e assim por diante.

Luc Hermitte
fonte
vim-plugO LEIA-ME de exemplo mostra "Dependências de grupo". Você já tentou isso ou difere dos métodos do VAM / NeoBundle?
muru
Perdi dependências de grupo na documentação do vim-plug. Eu vi que eles removeram sua tentativa de suportar dependências da base de código. Em relação às dependências do grupo, não vejo como isso pode ajudar. Dependências não devem ser declaradas pelo usuário final. Eles devem ser declarados pelos criadores do plugin. Se você olhar pelo plugin lh-cpp e olhar de perto, verá que as dependências não são algo linear. É um gráfico orientado, que precisa ser acíclico para evitar problemas.
Luc Hermitte
Até agora, eu uso o VAM há mais de uma década e estou feliz com isso. No entanto, usei o vim-flavor, pois é muito mais fácil integrar o travis - para testar meus plugins. E, infelizmente, ambos usam uma sintaxe diferente para declarar dependências.
Luc Hermitte
11
FYI: O desenvolvimento do NeoBundle parou (desde 23 de fevereiro de 2016). Ele recomenda seu sucessor Dein.vim (do mesmo autor).
Peter V. Mørch 27/03
3

A maioria desses gerenciadores de plug-ins faz um ótimo trabalho no gerenciamento de plug-ins, mas deixa a dor de cabeça ao gerenciar o aplicativo vimrc. Se você possui várias máquinas e deseja a mesma configuração, o Vire facilita bastante . Você não precisa de git ou descobrir sub-módulos ou qualquer esforço extra para configurar ou migrar.

  • Instale o Python, que é o que os plugins Vim mais modernos são escritos e necessários de qualquer maneira
  • pip install vire
  • Publique seu existente vimrcno Github como uma essência e mantenha-o lá
  • Se estiver no Windows, vire -ipara instalar o Vim mais recente ou (Neovim com -i -n)
  • Remova todas as chamadas de função de plug-in existentes e defina chamadas comentadas para instalar quaisquer plug-ins " Plug 'tpope/vim-unimpaired'
  • vire gistID

Em seguida, execute viresempre que desejar que seus vimrcou plug-ins sejam atualizados ou com -ia atualização do aplicativo.

O Vire aproveita o packrecurso do Vim / Neovim para carregar plugins. Você também pode continuar usando o gerenciador de plugins existente, mas use o Vire para instalar apenas o Vim, oe o vimrcpróprio gerenciador de plugins, se preferir.

genotrance
fonte
1

Para pessoas que desejam um gerenciador de plugins completo usando o Pathogen, também existe o apt-vim. Você pode instalá-lo com curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (como descrito aqui: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). Uma vez instalado, você pode simplesmente digitar apt-vim installseguido pelo nome do repositório de pacotes, semelhante ao gerenciador de pacotes apt do Ubuntu.

Melanie Day
fonte
11
Esta é essencialmente uma resposta apenas para link. Se você pudesse entrar em mais detalhes sobre como instalar e usar o apt-vim, seria aceitável.
Tumbler41
Eu atualizei. Realmente pensei que deveria ser um comentário no post sobre o Pathogen, mas não tenho pontos suficientes para comentar
Melanie Day
11
Link ausente para o plug-in. Também novamente um plugin que sugere curl URL |sh. Eu nunca sugeriria que alguém executasse algum código aleatório da Internet. Realmente isso é um mau hábito de segurança.
Christian Brabandt
0

Eu estava procurando uma maneira de usar, pathogenmas atualizá-la facilmente e torná-lo portátil, então talvez um bashscript possa ser útil (usando a vim-plugfuncionalidade) -

#!/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

E então um exemplo .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
nrako
fonte
11
Você pode adicionar alguns detalhes a isso? A principal pergunta que o OP coloca é "Alguém pode me dar uma breve visão geral das diferenças [nos gerenciadores de pacotes] para que eu possa decidir qual funciona melhor para mim"? Como o seu envio ajuda a responder a isso? O que você está adicionando ao patógeno especificamente que ele não possui? Aquele tipo de coisa.
Camada B