Qual é o recurso do pacote Vim8 e como devo usá-lo?


Respostas:


74

Primeiro, a documentação relevante pode ser encontrada :h packagesna versão compilada do Vim8 e aqui no Github .

Uma primeira observação importante é sobre o vocabulário: No Vim8, um pacote é definido assim:

Um pacote Vim é um diretório que contém um ou mais plugins.

Isso significa que o novo gerenciador de pacotes foi criado para ajudar os usuários a gerenciar todos os seus plugins no mesmo arquivo morto. O documento lista as seguintes vantagens:

  • Um pacote pode ser baixado como um arquivo morto e descompactado em seu próprio diretório. Portanto, os arquivos não são misturados aos arquivos de outros plugins. Isso facilita a atualização e a remoção.

  • Um pacote pode ser um repositório git, mercurial etc. Isso facilita muito a atualização.

  • Um pacote pode conter vários plugins que dependem um do outro.

  • Um pacote pode conter plug-ins carregados automaticamente na inicialização e carregados apenas quando necessário :packadd.

Portanto, a ideia é criar uma pasta contendo todos os plugins com a seguinte estrutura:

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

A localização da pasta é definida pela opção packpath(Consulte :h 'packpath').

Observe a importância da estrutura da sua pasta:

  • A startpasta contém plugins que serão carregados automaticamente na inicialização.
  • A optpasta contém plugins "opcionais", carregados com o packaddcomando
  • As subpastas ( plugin, autoload, doc, ...) são os que você está acostumado a nos plugins.

Aqui está uma recapitulação das pastas:

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

Quando esses arquivos estiverem no lugar certo, a abertura do Vim carregará os plugins starte os optdisponibilizará :packadd.


Agora, esse recurso pode substituir os gerenciadores de plug-in existentes?

Disclaimer: Esta parte pode ser um pouco opinativa.

Eu acho que a abordagem desse novo gerenciador de pacotes é realmente diferente da dos gerenciadores de plugins a que estávamos acostumados, porque foi feita para gerenciar um (ou vários) archive (s) que contém alguns plugins.

Pronto, o gerenciador de pacotes não fornece recursos para atualizar seus plug-ins um a um, para buscá-los automaticamente em um endereço do Github ou para selecionar os plug-ins que você deseja ativar / desativar.

Não tenho certeza de que será realmente conveniente usá-lo imediatamente (especialmente porque lidar com repositórios de controle de versão aninhados pode ser uma tarefa dolorosa), mas talvez essa seja a ocasião para tornar os gerenciadores de plugins mais eficientes?

Agora também é possível imaginar mover os plug-ins existentes para adotar a estrutura exigida pelo gerenciador de pacotes e gerenciá-los diretamente do sistema de arquivos. Talvez algum wrapper seja criado para usar esse novo recurso.


EDIT Como sugerido por @Sato Katsura, aqui está uma observação sobre o helptagscomando. O commit do Vim8 introduziu duas linhas no 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.

O que significa que o novo gerenciador de pacotes facilita a geração das helptags colocadas no arquivo do usuário. Com o comando único, :helptags ALLtodas as helptags são geradas.


11
Bom resumo. O packagerecurso deve finalmente acabar com os vimballs e os dinossauros relacionados, para não competir com os gerenciadores de plugins modernos. É um substituto viável pathogen, desde que você não confie nos pathogenrecursos mais obscuros. Não faz nenhuma tentativa de substituir, digamos Vundle,. O conceito de pacote como uma coleção de plug-ins é bem pensado e potencialmente útil, mas receio que ninguém o use porque os gerenciadores de plug-ins modernos não o suportam. E os gerenciadores de plugins não o suportam porque ninguém o usa. É um problema de galinha e ovo.
Sato Katsura

2
Não relacionado: você pode querer adicionar uma observação sobre :helptags ALL.
Sato Katsura

1
@ Sato, obrigado pela observação sobre os vimballs: como eu nunca os uso, nem pensei nisso, mas agora que você mencionou, parece bastante óbvio. Concordo com você sobre a nota "ninguém vai usá-lo". Não estou realmente otimista sobre isso. Para o que :helptag ALLeu vou dar uma olhada e adicioná-lo, obrigado pela sugestão!
statox


4
O minpac é um novo gerenciador de pacotes para o Vim 8 (e o NeoVim). Ele se baseia nos pacotes do Vim 8, fornecendo comandos para updateseus plugins ou para cleaneles (removendo plugins não utilizados). Para pontos de bônus, ele também usa o novo recurso de controle de tarefas para executar várias atualizações em paralelo. Eu acho que é realmente promissor, porque aprimora os pacotes internos com um UX melhor.
Nelstrom 03/04

11

Para expandir o item "ele pode substituir os gerenciadores de plugins",

Eu costumava usar o Vundle, o que era fantástico, mas agora o substitui por 18 linhas de bash.

Acho útil usar subpastas no diretório pack para agrupar plugins relacionados. Por exemplo, "Sintaxe" ou "Ruby".

O exemplo relevante do bash está abaixo. Coloque em um arquivo e execute-o.

Discussão adicional sobre o tópico em: 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

A resposta fornecida pelo @statox é muito descritiva, mas para um novo usuário que pode ser uma distração, porque eles podem ler o arquivo de ajuda diretamente. Quero descrever o que você precisa fazer nos ponteiros.

  1. Crie um pack/*/startdiretório em qualquer diretório fornecido por set packpath. Eu entrei ~/.config/nvim/pack/*/start. Observe que você pode usar qualquer nome de diretório que desejar, *mas não pode omitir totalmente, não sei por quê. Por exemplo, você pode usar o diretório ~/.config/nvim/pack/foo/startou ~/.config/nvim/pack/bar/startnão ~/.config/nvim/pack/start.

  2. Vá para o pack/*/startdiretório e clone o pacote lá.

  3. Inicie o n / vim e faça :scriptnamespara verificar se tudo está carregado. Não se preocupe se nem todas as partes estiverem carregadas, porque alguns arquivos devem ser carregados após um gancho, por exemplo autoload/plugin.vim.
  4. Para desinstalar, basta remover o diretório em que você clonou o pacote. Não precisa fazer mais nada.
  5. Faça :helptags ALLpara gerar tags para todos os documentos de ajuda. Fazer :helptags {dir}para gerar etiquetas para os documentos de ajuda sob o diretório dir. Por exemplo, se você inserir seu plug-in ~/.config/nvim/pack/foo/plugin_name, faça :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Isso irá gerar um tagsarquivo no diretório doc do plug-in. Se você remover o plug-in do diretório, o arquivo de tags desaparecerá e o vim não encontrará o arquivo de ajuda; portanto, você não precisa desinstalar o arquivo de documento manualmente.

2

O novo formato pode ser considerado um equivalente do Pathogen, portanto ainda há espaço para um gerente que possa baixar os plugins que você deseja. Existem alguns novos gerenciadores de plugins que aproveitam esse novo formato de pacote, mas eu ainda criei o Vire, pois eles deixam a dor de cabeça ao gerenciar o vimrcpara você. Se você possui várias máquinas e deseja a mesma configuração, o Vire facilita bastante.


Se você possui várias máquinas WINDOWS e deseja a mesma configuração ... FTFY
Dan J.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.