Vim 8 был выпущен сегодня, и в примечаниях к выпуску упоминается новая «пакетная» функция. Что это такое и как мне его использовать?
Самое главное, он заменяет старые добрые менеджеры плагинов ?
Vim 8 был выпущен сегодня, и в примечаниях к выпуску упоминается новая «пакетная» функция. Что это такое и как мне его использовать?
Самое главное, он заменяет старые добрые менеджеры плагинов ?
Ответы:
Прежде всего, соответствующую документацию можно найти :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
генерируются все справочные теги.
:helptags ALL
.
:helptag ALL
я посмотрю и добавлю, спасибо за предложение!
update
ваших плагинов или clean
их (удаление неиспользуемых плагинов). Для получения бонусных баллов также используется новая функция управления заданиями для параллельного выполнения нескольких обновлений. Я думаю, что это действительно многообещающе, потому что оно расширяет встроенные пакеты лучшим UX.
Чтобы расширить "может ли он заменить менеджеры плагинов",
Раньше я использовал 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
Ответ, предоставленный @statox, очень описательный, но для нового пользователя это может отвлекать, поскольку он может прочитать файл справки напрямую. Я хочу изложить, что вам нужно сделать в указателях.
Создать pack/*/start
каталог под любым каталогом, предоставленным set packpath
. Я сделал в ~/.config/nvim/pack/*/start
. Обратите внимание, что вы можете использовать любое имя каталога, которое хотите, *
но не можете его полностью опустить, я не знаю почему. Например, вы можете использовать каталог ~/.config/nvim/pack/foo/start
или ~/.config/nvim/pack/bar/start
нет ~/.config/nvim/pack/start
.
Перейдите в pack/*/start
каталог и клонируйте пакет там.
:scriptnames
проверьте, все ли загружено. Не беспокойтесь, если не каждая часть загружена, потому что некоторые файлы предназначены для загрузки после некоторого перехвата, например autoload/plugin.vim
.:helptags ALL
для создания тегов для всех справочных документов. Сделать :helptags {dir}
для создания тегов для справки документов в каталоге dir
. Например, если вы вставили свой плагин ~/.config/nvim/pack/foo/plugin_name
, сделайте :helptags ~/.config/nvim/pack/foo/plugin_name/doc
. Это сгенерирует tags
файл в директории doc плагина. Если вы удалите плагин из каталога, файл тегов исчезнет, и vim не найдет файл справки, поэтому вам не нужно удалять файл doc вручную.Новый формат можно рассматривать как эквивалент Pathogen, поэтому у менеджера есть место, которое может загрузить нужные плагины. Есть несколько новых менеджеров плагинов, которые используют этот новый формат пакета, но я все еще создал Vire, так как они оставляют головную боль управления им vimrc
. Если у вас несколько машин и вам нужна одна и та же конфигурация, Vire делает это очень просто.
package
функция призвана окончательно покончить с Vimballs и связанными с ними динозаврами, а не конкурировать с современными менеджерами плагинов. Это реальная заменаpathogen
, при условии, что вы не полагаетесь наpathogen
более неясные функции. Он не делает никаких попыток заменить, скажем,Vundle
. Концепция пакета как набора плагинов хорошо продумана и потенциально полезна, но я боюсь, что никто не будет его использовать, потому что современные менеджеры плагинов не поддерживают его. И менеджеры плагинов не будут поддерживать это, потому что никто не использует это. Это проблема курицы с яйцом.