В чем разница между менеджерами плагинов vim?


197

Я просматривал различные менеджеры пакетов для vim и тот, который решил использовать vim-plug, но я видел других, таких как pathogen и vundle, и я, честно говоря, не знаю, в чем разница.

Может ли кто-нибудь дать мне краткий обзор различий, чтобы я мог решить, что лучше для меня?


Ответы:


142

vim-plug - это хорошая альтернатива Vundle, она несколько отличается от технической точки зрения, что должно сделать ее быстрее ( см. это ). У этого есть большинство (или все?) Особенностей Vundle.

  • Параллельная процедура обновления для Vim с любым +ruby, +pythonили Neovim. Возврат к последовательному режиму с использованием Vimscript, если ни один не доступен.
  • Ленивая загрузка, для более быстрого запуска ( см. Это ).
  • Установите плагины.
  • Обновите плагины.
  • Обзор / откат обновлений.
  • Поддерживает системы OSX, Linux и UNIX и MS Windows.
  • Хуки после обновления, например, автоматическая перекомпиляция YCM

Чтобы начать использовать это:

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

И в вашем vimrc:

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

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

Тогда дайте команду

:PlugInstall

установить перечисленные плагины.


1
Спасибо за рекомендацию; До этого я сопротивлялся загрузчикам, потому что мне нравятся мои времена загрузки. Одна неочевидная вещь, которую я должен был исследовать, была :PlugInstallо новом плагине; даже официальные документы немного скрывают это.
MSS

7
хотя мне нравится vim-plug, имейте в
виду,

Для Windows vim имеет номер версии папки vim , такой как vim81 для vim 8.1. На первом этапе при использовании curl убедитесь, что папка есть ..\vim81\autoload\..и нет ..\.vim\autoload\...
Стивен Джейкоб

56

Патоген прост. По сути это просто делает:

  • автозагрузка плагинов из папки
  • генерировать теги помощи для этих плагинов

Плюсы:

  • минималист

Минусы:

  • все остальное делается вручную (установка, обновление, удаление и т. д.)
  • не ленивая загрузка

Чтобы установить его, скачайте pathogen.vimна ~/.vim/autoload:

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

И добавьте в свой .vimrc:

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

Если вам не нравится сходить с ума, звоните только :Helptagsтогда, когда вам нужно.

Плагины затем добавляются в ~/vim/bundle.


20
Просто чтобы быть ясно, патоген не менеджер плагинов. Все, что он делает, это управляет временем выполнения. Вот и все. Любые плагины, которые вы добавляете в ~ / .vim / bundle (то есть расположение по умолчанию, вы можете изменить это), добавляет файлы плагина в путь выполнения vim, чтобы они были доступны. Установка, обновление, удаление вручную не очень удобна, если у вас не так много плагинов. Кроме того, при обновлении плагинов вы можете выбрать получение только части изменений, а не обновлять их до последней версии плагина, что дает вам большой контроль.
Акшай

1
@AkshayHegde Да, как только я начал писать ответ Vundle, мне пришлось вернуться и отредактировать «менеджер плагинов» из этого ответа. Взято за мошенничество, поэтому я продолжаю использовать его вместо всего остального.
Муру

1
Вим-пандемия является хорошим дополнением к патогену. Он обрабатывает удаленные репозитории за плагинами, оставляя Pathogen для обработки путь выполнения. Это означает, что нужно два инструмента, но для несопоставимых задач, которые «должны» обрабатываться отдельно. Преимущество Pathogen + Pandemic, на мой взгляд, наиболее убедительно: нет необходимости иметь дело с подмодулями git для пакетов.
Джаланб

2
Я использую патоген в качестве загрузчика плагинов. Но я использую подмодули git для управления версиями отдельных плагинов. Так что его минималистский подход хорошо работает для моего варианта использования. Как другие менеджеры обрабатывают обновления версий и плагинов.
Мартин Йорк

2
@JaDogg О, это из README : «Обычно Vim ожидает, что вы запустите: helptags в каждом каталоге с документацией (например,: helptags ~ / .vim / doc). В состав pathogen.vim входит команда: Helptags, которая делает это на каждый каталог в вашем «runtimepath». Если вы действительно хотите сойти с ума, вы можете даже вызвать Helptags в вашем vimrc. Я не люблю сумасшедшие ». Я бы сказал, что если у вас много плагинов, это может немного замедлить запуск. И вам на самом деле не нужно запускать его при каждом запуске, достаточно одного раза для установки / обновления плагина.
Муру

43

Vundle является более сложным. Это менеджер пакетов а-ля aptили yumдля плагинов. Может:

  • поиск по индексу плагинов
  • обновить плагины
  • автоматически генерировать справочные теги
  • сохранять, но не использовать плагины в папке автозагрузки
  • вычистить такие неиспользуемые плагины
  • Работает на Linux, OSX и MS Windows

Установить:

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

А затем добавьте в свой .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

Чтобы установить плагин, используйте Pluginкоманду в .vimrc(больше примеров на Github README):

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

А потом звоните :PluginInstallиз .vim(или vim +PluginInstall +qall).


В NeoBundle README, на который вы ссылаетесь, говорится, что проект устарел в пользу github.com/Shougo/dein.vim
Джонатан Хартли,

@JonathanHartley "темный"? Полагаю, я должен был это предвидеть.
Муру

13

dein.vim : В качестве продолжения этого вопроса я добавлю сюда менеджер плагинов, созданный известным Shougo.

Согласно README, плагин имеет следующие зависимости:

  • Vim >7.4 or neovim: хотя поддерживать Vim в актуальном состоянии - это хорошо, для некоторых пользователей может быть проблематично, что предыдущие версии не поддерживаются
  • git: что довольно распространено для менеджера пакетов
  • rsync: который не так распространен, как git

Автор утверждает, что это быстрее, чем NeoBundle. Эталон можно найти на странице readme проекта .

Одна оригинальная концепция этого менеджера плагинов является то , что он не дает каких - либо команд, но только функции: например, для обновления плагинов вы не можете использовать что - то вроде :PlugUpdate, вы должны позвонить: :call dein#update(). Честно говоря, я не нашел объяснения этому выбору дизайна.

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

Dein.vim поддерживает получение плагинов из Github (с облегченным доступом к плагинам из vimscript.org) и из локальных каталогов.

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

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

Интересным моментом является то, что автор хочет, чтобы dein.vim легко тестировался и поддерживался, поэтому репозиторий также содержит несколько тестовых скриптов.

Наконец, я бы сказал, что этот менеджер плагинов выглядит легким и быстрым, что интересно, но я думаю, что он менее удобен для пользователя, чем, например, vim-plug или Vundle .


Да, Shougo также описывает dein.vim как «Менеджер плагинов Dark Vim / Neovim», если кто-то знает, что это значит, не стесняйтесь редактировать этот ответ: мне любопытно ;-)


1
«Dark powered» - фраза, которую вы найдете в плагинах Shimgo vim, которые поддерживают / или предназначены только для NeoVim.
Йонси Солис

8
Я думаю, что фраза «Dark powered» происходит от «пользователей Light Vim» - тех, кто использует только функции по умолчанию, и «пользователей Dark Vim» - тех, кто пытается использовать его в качестве IDE или, по крайней мере, использует много плагинов и имеет много строк, добавленных в их файл vimrc (подробнее об этом здесь в презентации Shougo - slideshare.net/Shougo/lets-talk-about-neovim - слайд 6)
lewiatan

1
@lewiatan: Спасибо, я думаю, вы получите правильный ответ. (Интересная презентация Шоуго)
statox

1
@statox Shougo утверждает : «Dein.vim также отказывается от использования команд в пользу вызова функций, что также может способствовать повышению производительности (хотя я не уверен)».
Алексей Магура

1
@statox, Лулз, нет, наверное, это не слова Шоуго, тогда я не понял, что это не его блог.
Алексей Магура

13

И Vim 8.0, и Neovim имеют свой встроенный менеджер пакетов. В Vim 8.0 создайте следующие каталоги: .vim/pack/*/startгде *любое имя, которое вы хотите использовать; например .vim/pack/jimmy/start.

Клонируйте свой плагин в стартовый каталог, как если бы вы использовали патоген.

С Neovim каталоги немного длиннее:

.local/share/nvim/site/pack/*/start, Оттуда сделайте то же самое, что и для Vim.

Нет необходимости в другом менеджере плагинов.

В Vim или Neovim бегите :h packagesнемного подробнее. Прочитайте часть о цветах, потому что они разные, хотя и не сильно. Вам не нужны дополнительные инструкции в ваших .vimrcили ваших nvim/init.vimфайлах.

Надеюсь, это поможет.


8

Особенно мне нравится VAM для его самостоятельного развертывания: все, что вам нужно, это ваш, .vimrcа затем запустить vim.

Таким образом, вам не нужна To Installстрока, используемая большинством других менеджеров плагинов (первый шаг установки самого менеджера плагинов).


6

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

Причины в том, что я поддерживаю несколько плагинов и у меня много взаимозависимостей: универсальная библиотека используется всеми, механизм шаблонов / сниппетов используется набором C ++, плагин рефакторинга также использует плагин ctags library-plugin , и так далее. Требование от конечного пользователя выполнить до 10 строк для установки интересующих его плагинов не кажется мне хорошим решением.

Пока что я знаю только два таких плагина: vim-addon-manager и NeoBundle . VAM разослал свой код базы данных vim-pi после многих обменов в официальном списке рассылки vim. Идея заключалась в том, что NeoBundle (и любой другой плагин, заинтересованный в управлении зависимостями) может в конечном итоге использовать vim-pi.

Я недавно сталкивался с vim-flavor, который также обрабатывает зависимости. По теме проверяет версии плагинов, чтобы установить правильные.

Примечание: так как мой первоначальный ответ,

  • Разработка NeoBundle остановлена;
  • и хотя vim-pi регулярно обновляет свою базу данных из плагинов на vim.org, и что VAM все еще можно использовать для выражения зависимостей, кажется, больше невозможно добавлять псевдоним в базу данных vim-pi: MR / PR больше не объединяются

AFAIK, ни один из этих плагинов не клонирует / устанавливает / обновляет плагины в фоновом режиме / параллельно. Поскольку я не устанавливаю новую среду vim и не обновляю установленные мной плагины раз в месяц, честно, мне все равно. Они конечно обновляют 'helptags', заботятся 'rtp'и так далее.


vim-plugВ README есть пример: «Групповые зависимости». Вы пробовали это, или это отличается от методов VAM / NeoBundle?
Муру

Я пропустил групповые зависимости в документации vim-plug. Однако я видел, что они удалили свою попытку поддержки зависимостей из базы кода. Что касается групповых зависимостей, я не вижу, как это может помочь. Зависимости не должны быть объявлены конечным пользователем. Они должны быть объявлены авторами плагина. Если вы посмотрите на плагин lh-cpp и посмотрите внимательно, вы увидите, что зависимости не являются чем-то линейным. Это ориентированный граф, который должен быть ацикличным, чтобы избежать проблем.
Люк Эрмитт

До сих пор я использую VAM уже более десяти лет, и я доволен этим. Тем не менее, я использовал vim-flavor, поскольку его проще интегрировать с travis, чтобы протестировать мои плагины. И, к сожалению, оба используют разные синтаксис для объявления зависимостей.
Люк Эрмитт

1
К вашему сведению: разработка NeoBundle остановлена (с 23 февраля 2016 года). Вместо этого он рекомендует своего преемника Dein.vim (того же автора).
Питер В. Мёрч

3

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

  • Установите Python, который является тем, что большинство современных плагинов Vim написано и требуется в любом случае
  • pip install vire
  • Опубликуйте свой существующий vimrcна Github как гист и сохраните его там
  • Если на Windows, vire -iустановить последнюю версию Vim или (Neovim с -i -n)
  • Удалите все существующие вызовы функций плагинов и определите закомментированные вызовы для установки любых плагинов. " Plug 'tpope/vim-unimpaired'
  • vire gistID

Затем запустите в vireлюбое время, когда вы хотите, чтобы ваши vimrcили плагины были обновлены или -iтакже обновили приложение.

Vire использует функцию Vim / Neovim packдля загрузки плагинов. Вы также можете продолжать использовать существующий менеджер плагинов, но используйте Vire для установки только Vim, the vimrcи самого менеджера плагинов, если хотите.


1

Для людей, которым нужен полноценный менеджер плагинов, использующий Pathogen, существует также apt-vim. Вы можете установить его с помощью curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh (как описано здесь: https://www.linuxsecrets.com/1715-vi-editor-tips-trick-and-secrets-into-the-vi-vim-editor-part-ii ). После установки вы можете просто ввести имя, apt-vim installа затем имя хранилища пакетов, аналогично менеджеру пакетов Ubuntu apt.


1
По сути, это только ссылка. Если бы вы могли немного подробнее рассказать о том, как установить и использовать apt-vim, это было бы приемлемо.
Tumbler41

Я обновил это. На самом деле я подумал, что это должен быть комментарий к посту о патогене, но у меня недостаточно очков, чтобы комментировать
Мелани Дэй

1
Ссылка отсутствует на плагин. Также снова плагин, который предлагает curl URL |sh. Я бы никогда не предложил никому запустить какой-нибудь случайный код из Интернета. На самом деле это плохой навык безопасности.
Кристиан Брабандт

0

Я искал способ использования, pathogenно легко обновлял и делал его переносимым, поэтому, возможно, bashсценарий может быть полезен (используя vim-plugфункциональность) -

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

И тогда пример .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

1
Можете ли вы добавить некоторые детали к этому? Основной вопрос, который задает ОП: «Может ли кто-нибудь дать мне краткий обзор различий [в менеджерах пакетов], чтобы я мог решить, какой из них лучше для меня»? Как ваша заявка помогает ответить на этот вопрос? Что вы добавляете к патогену конкретно, чего у него нет? Такого рода вещи.
B Layer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.