Что такое функция пакета Vim8 и как ее использовать?

Ответы:

74

Прежде всего, соответствующую документацию можно найти :h packagesв только что скомпилированной версии Vim8 и здесь, на Github .

Первое важное замечание касается словаря: в Vim8 пакет определяется следующим образом:

Пакет Vim - это каталог, содержащий один или несколько плагинов.

Это означает, что новый менеджер пакетов был создан, чтобы помочь пользователям управлять всеми своими плагинами в одном архиве. В документе перечислены следующие преимущества:

  • Пакет может быть загружен в виде архива и распакован в своем собственном каталоге. Таким образом, файлы не смешиваются с файлами других плагинов. Это позволяет легко обновлять и удалять.

  • Пакет может быть репозиторием git, mercurial и т. Д. Это действительно легко обновлять.

  • Пакет может содержать несколько плагинов, которые зависят друг от друга.

  • Пакет может содержать плагины, которые автоматически загружаются при запуске, и те, которые загружаются только при необходимости :packadd.

Таким образом, идея состоит в том, чтобы создать папку, содержащую все плагины со следующей структурой:

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

Расположение папки определяется параметром packpath(см. :h 'packpath').

Обратите внимание на важность структуры вашей папки:

  • startПапка содержит плагины , которые будут загружаться автоматически при запуске.
  • optПапка содержит «дополнительные» плагины, загруженные с packaddкомандой.
  • Подпапки ( plugin, autoload, doc, ...) являются те , что вы использовали в плагинах.

Вот резюме папок:

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

Как только эти файлы окажутся в нужном месте, открытие Vim загрузит плагины startи сделает их optдоступными с :packadd.


Теперь, может ли эта функция заменить существующие менеджеры плагинов?

Отказ от ответственности: эта часть может быть немного самоуверенным.

Я думаю, что подход этого нового менеджера пакетов действительно отличается от того, к которому мы привыкли, потому что он создан для управления одним (или несколькими) архивом (ами), содержащими некоторые плагины.

В стандартной комплектации менеджер пакетов не предоставляет функций для обновления ваших плагинов по одному, их автоматической загрузки с адреса Github или выбора плагинов, которые вы хотите включить / отключить.

Я не уверен, что будет действительно удобно использовать его из коробки (особенно потому, что обработка вложенных репозиториев контроля версий может быть болезненной задачей), но, может быть, это повод сделать менеджеры плагинов более эффективными?

Теперь также можно представить перемещение существующих плагинов для принятия структуры, требуемой менеджером пакетов, и управления ими непосредственно из файловой системы. Может быть, будет создана оболочка для использования этой новой функции.


РЕДАКТИРОВАТЬ Как предложено @Sato Katsura здесь примечание о helptagsкоманде. В коммите Vim8 введены две строки в helptagдокументе :

: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.

Это означает, что новый менеджер пакетов облегчает генерацию справочных тегов, помещенных в пользовательский архив. С помощью одной команды :helptags ALLгенерируются все справочные теги.

statox
источник
11
Хорошее резюме. Эта packageфункция призвана окончательно покончить с Vimballs и связанными с ними динозаврами, а не конкурировать с современными менеджерами плагинов. Это реальная замена pathogen, при условии, что вы не полагаетесь на pathogenболее неясные функции. Он не делает никаких попыток заменить, скажем, Vundle. Концепция пакета как набора плагинов хорошо продумана и потенциально полезна, но я боюсь, что никто не будет его использовать, потому что современные менеджеры плагинов не поддерживают его. И менеджеры плагинов не будут поддерживать это, потому что никто не использует это. Это проблема курицы с яйцом.
Сато Кацура
2
Не связано: вы можете добавить заметку о :helptags ALL.
Сато Кацура
1
@Sato спасибо за примечание о vimballs: поскольку я никогда не использовал их, я даже не думал об этом, но теперь, когда вы упомянули об этом, это кажется довольно очевидным. Я согласен с вами по поводу примечания «никто не будет его использовать», я не очень оптимистичен по этому поводу. Для :helptag ALLя посмотрю и добавлю, спасибо за предложение!
statox
Я переместил обсуждение вне темы в чат .
Мартин Турной
4
minpac - это новый менеджер пакетов для Vim 8 (и NeoVim). Он построен на основе пакетов Vim 8, обеспечивая команды для updateваших плагинов или cleanих (удаление неиспользуемых плагинов). Для получения бонусных баллов также используется новая функция управления заданиями для параллельного выполнения нескольких обновлений. Я думаю, что это действительно многообещающе, потому что оно расширяет встроенные пакеты лучшим UX.
17
11

Чтобы расширить "может ли он заменить менеджеры плагинов",

Раньше я использовал Vundle, который был фантастическим, но теперь заменил его на 18 или около того линий bash.

Я считаю полезным использовать подпапки в каталоге pack для группировки связанных плагинов. Например, «Синтаксис» или «Рубин».

Соответствующий пример bash приведен ниже. Поместите в файл и запустите его.

Дополнительное обсуждение по теме: 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

Ответ, предоставленный @statox, очень описательный, но для нового пользователя это может отвлекать, поскольку он может прочитать файл справки напрямую. Я хочу изложить, что вам нужно сделать в указателях.

  1. Создать pack/*/startкаталог под любым каталогом, предоставленным set packpath. Я сделал в ~/.config/nvim/pack/*/start. Обратите внимание, что вы можете использовать любое имя каталога, которое хотите, *но не можете его полностью опустить, я не знаю почему. Например, вы можете использовать каталог ~/.config/nvim/pack/foo/startили ~/.config/nvim/pack/bar/startнет ~/.config/nvim/pack/start.

  2. Перейдите в pack/*/startкаталог и клонируйте пакет там.

  3. Запустите n / vim и :scriptnamesпроверьте, все ли загружено. Не беспокойтесь, если не каждая часть загружена, потому что некоторые файлы предназначены для загрузки после некоторого перехвата, например autoload/plugin.vim.
  4. Чтобы удалить, просто удалите каталог, в котором вы клонировали пакет. Больше ничего не нужно делать.
  5. Есть ли :helptags ALLдля создания тегов для всех справочных документов. Сделать :helptags {dir}для создания тегов для справки документов в каталоге dir. Например, если вы вставили свой плагин ~/.config/nvim/pack/foo/plugin_name, сделайте :helptags ~/.config/nvim/pack/foo/plugin_name/doc. Это сгенерирует tagsфайл в директории doc плагина. Если вы удалите плагин из каталога, файл тегов исчезнет, ​​и vim не найдет файл справки, поэтому вам не нужно удалять файл doc вручную.
клаус
источник
2

Новый формат можно рассматривать как эквивалент Pathogen, поэтому у менеджера есть место, которое может загрузить нужные плагины. Есть несколько новых менеджеров плагинов, которые используют этот новый формат пакета, но я все еще создал Vire, так как они оставляют головную боль управления им vimrc. Если у вас несколько машин и вам нужна одна и та же конфигурация, Vire делает это очень просто.

genotrance
источник
Если у вас несколько машин WINDOWS и вам нужна одна и та же конфигурация ... FTFY
Дэн Дж.