Pacotes do Vim 8, como sobrescrever um pacote padrão?

7

Instalei o Dr. Chip'snetrw em sua página inicial, pois é mais novo e atualizado com mais freqüência do que os arquivos que fazem parte da distribuição principal do Vim.

Antes do Vim 8, eu sempre processava o método de instalação do Vimball, abrindo .vbae executando :source %. Mas, agora que o Vim 8 adicionou o mecanismo de pacotes, decidi usá-lo. Eu tenho meus pacotes em:

~/.vim/pack/packages/start/
~/.vim/pack/packages/opt/

Então, para instalar o NETRW como um pacote, eu fiz:

cd ~/.vim/pack/packages/start/
wget  http://www.drchip.org/astronaut/vim/vbafiles/netrw.vba.gz
mkdir netrw.vim
gunzip netrw.vba.gz
vim netrw.vba
:UseVimball ~/.vim/pack/packages/start/netrw.vim

E foi instalado corretamente. Mas agora, quando edito um arquivo e uso um netrwcomando, digamos, :Lexplorenão tenho certeza de qual netrwestá sendo usado. Se eu fizer:

vim foo
:scriptnames
  1: /etc/vimrc
  2: /usr/share/vim/vimfiles/archlinux.vim
  3: ~/.vim/vimrc
  (...)
 20: /usr/share/vim/vim80/plugin/netrwPlugin.vim
 21: /usr/share/vim/vim80/plugin/rrhelper.vim
 22: /usr/share/vim/vim80/plugin/spellfile.vim
 23: /usr/share/vim/vim80/plugin/tarPlugin.vim
 24: /usr/share/vim/vim80/plugin/tohtml.vim
 25: /usr/share/vim/vim80/plugin/vimballPlugin.vim
 26: /usr/share/vim/vim80/plugin/zipPlugin.vim
 27: ~/.vim/pack/packages/start/csv.vim/plugin/csv.vim
 28: ~/.vim/pack/packages/start/csv.vim/ftdetect/csv.vim
 29: ~/.vim/pack/packages/start/netrw.vim/plugin/netrwPlugin.vim
 30: /usr/share/vim/vim80/scripts.vim

Portanto, a distribuição netrwé executada primeiro (20) e, em seguida, executada (29). Se eu adicionar packloadallao meu, vimrca situação muda:

  1: /etc/vimrc
  2: /usr/share/vim/vimfiles/archlinux.vim
  3: ~/.vim/vimrc
  4: ~/.vim/pack/packages/start/csv.vim/plugin/csv.vim
  5: ~/.vim/pack/packages/start/netrw.vim/plugin/netrwPlugin.vim
  (...)
 19: /usr/share/vim/vim80/plugin/gzip.vim
 20: /usr/share/vim/vim80/plugin/logiPat.vim
 21: /usr/share/vim/vim80/plugin/manpager.vim
 22: /usr/share/vim/vim80/plugin/matchparen.vim
 23: /usr/share/vim/vim80/plugin/netrwPlugin.vim

E o instalado netrwno meu diretório é executado primeiro (5). No entanto, a distribuição Vim netrwainda é executada (23)!

  • O netrwque o Vim usará quando eu disser :Lexplore? Parece usar o novo (o Vimball instalado), :Lexploremas não tenho certeza, pois :h pi_netrwme fornece o novo documento, mas :h netrwa documentação antiga (a que acompanha o Vim).

  • A execução :helptags ~/.vim/pack/packages/start/netrw.vim/docnão ajuda com o problema de documentação acima (ou seja, às vezes recebo o novo e às vezes o antigo). Existe algo que estou fazendo errado com isso?

  • O Vim sempre dá preferência aos comandos plugins / scripts / autoload que estão $VIM(padrão ~/.vim) acima dos comandos $VIMRUNTIME?

grochmal
fonte
11
Se você quiser ter certeza de que possui apenas uma versão do netrw instalada, poderá usar o plug-in NetrwClean para remover todas as versões do netrw (a que está no diretório de usuários ~/.vime a que está no diretório do sistema /usr/share/vim). Em seguida, você pode reinstalar a versão mais recente do netrw no site do Dr. Chip e você tem certeza de que apenas esta versão estará em execução agora.
weibeld

Respostas:

3

Se você olhar, netrwPlugin.vimencontrará:

if &cp || exists("g:loaded_netrwPlugin")
 finish
endif

Então, basta definir isso no seu .vimrc:

let g:loaded_netrwPlugin = 1

Se os dois usarem a mesma variável ( g:loaded_netrwPlugin), apenas um poderá ser carregado e será suficiente usar packloadallou fonte ~/.vim/pack/packages/start/netrw.vim/plugin/netrwPlugin.vimno final da sua .vimrc.

Laktak
fonte
11
Mas também não carregará o netrw ~/.vim/pack/../netrw?
Martin Tournoij 2/03
@Carpetsmoker direito, atualizado
laktak 2/17/17
11
Você está certo, ambos usam a mesma variável. E ainda mais, eles definem a variável para a versão do plug-in que está sendo carregado, o que permite testar qual arquivo está em operação. Ainda me pergunto como conserto as tags de documentação, mas isso deve ser outra pergunta. Muito Obrigado!
grochmal