Вічнозелений Vim: просте керування плагінами за допомогою git-субмодулів
Минулого разу ми побіжно торкнулись теми 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/
Однак такий сетап залишає пару проблем:
-
Повторювати щоразу довгий процес конфігурації розгортаючи середовище на новій машині нікому не хочеться.
.vimrc
, так само, як.bash_profile
і інші файли налаштувань, можна зберегти в репозиторій на GitHub і здійснювати контроль версій своїх конфігів через нього. Але Pathogen не зберігає списку плагінів, які підключає, тож спосіб, в який їх можна швидко за потреби встановити, не очевидний. -
Якщо ми клонуємо 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
Субмодулі можуть включати в себе інші субмодулі, тому за бажання можна організувати всі конфігураційні файли в один мега-репозиторій, як я спробував це зробити тут. Справа смаку, спробуйте і вирішіть для себе.