Минулого разу ми побіжно торкнулись теми Vim-плагінів, однак не поговорили про те, як вони підключаються. В цьому пості я хотів би розглянути один з варіантів зручної організації плагінів, а також спосіб їх швидкого і безболісного оновлення до останньої версії. Для цього ми використаємо Pathogen, GitHub і функціонал git під назвою submodules.

Pathogen

Існує кілька способів керування плагінами у Vim. Pathogen Тіма Поупа — один з найпопулярніших. Встановлюється він дуже просто:

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

Після цього у .vimrc слід вписати наступне:

execute pathogen#infect()

Тепер Pathogen при запуску Vim автоматично підтягуватиме всі плагіни, репозиторії яких розміщені в ~/.vim/bundle/. Тобто, щоб встановити, наприклад, плагін Prettier, потрібна одна команда в терміналі:

$ git clone https://github.com/prettier/vim-prettier ~/.vim/bundle/

Однак такий сетап залишає пару проблем:

  1. Повторювати щоразу довгий процес конфігурації розгортаючи середовище на новій машині нікому не хочеться. .vimrc, так само, як .bash_profile і інші файли налаштувань, можна зберегти в репозиторій на GitHub і здійснювати контроль версій своїх конфігів через нього. Але Pathogen не зберігає списку плагінів, які підключає, тож спосіб, в який їх можна швидко за потреби встановити, не очевидний.

  2. Якщо ми клонуємо 15 репозиторіїв в bundle/, це означає 15 запитів git pull щоразу, як ми захочемо оновити всі плагіни до останньої версії. Звісно, ці 15 запитів можна об’єднати в один довгий і незручний shell-скрипт. Але є кращий спосіб.

Git субмодулі

Як відомо, git забороняє розміщувати репозиторій всередині репозиторія. Натомість є можливість послатись всередині одного на інший, оголосивши дочірній репозиторій субмодулем батьківського.

Цей функціонал ідеально підходить для нашої мети. Замість того, щоб клонувати плагіни в bundle/, оголосимо їх у якості субмодулів1:

$ cd ~/.vim/bundle
$ git init
$ git submodule add https://github.com/prettier/vim-prettier

Додавши в такий спосіб всі потрібні плагіни до репозиторія bundle, можемо запушити його на GitHub. Субмодулі відобразяться там як посилання на відповідні репозиторії, з яких їх було клоновано.

Тепер у випадку, коли нам потрібно швидко встановити набір плагінів для Vim, просто клонуємо цей репозиторій у відповідне місце.

$ git clone https://github.com/username/bundle ~/.vim

Оновлювати дочірні репозиторії також дуже просто:

$ cd ~/.vim/bundle
$ git submodule foreach git pull origin master

Субмодулі можуть включати в себе інші субмодулі, тому за бажання можна організувати всі конфігураційні файли в один мега-репозиторій, як я спробував це зробити тут. Справа смаку, спробуйте і вирішіть для себе.