Сьогодні розглянемо, як можна організувати роботу з Git у редакторі Vim. З коробки в нього немає функціоналу для контролю версій, але редактор дуже легко розширюється за допомогою плагінів. Для початку оновіть свій Vim/Neovim до останньої версії та встановіть менеджер плагінів. Я буду використовувати vim-plug.
Почнемо з плагіна vim-fugitive. Для встановлення за допомогою vim-plug потрібно додати його до списку плагінів:
call plug#begin('~/.local/share/nvim/plugged')
Plug 'tpope/vim-fugitive'
call plug#end()
Зберігаємо і перезавантажуємо файл, для цього можна використати source ~/.config/nvim/init.vim
. Далі виконуємо команду :PlugInstall
. Плагін надає нам можливість взаємодіяти з Git через командний режим.
Наприклад, щоб подивитись статус, ми можемо виконати :G
, замість того щоб відкривати термінал через :ter
або переходити в нове вікно терміналу і там виконувати git status
. За аналогією ми можемо застосувати :Gcommit
для коміту, перед тим додавши файл командою :Gw
.
Також перевагою плагіна є зручне керування вікнами. Для прикладу, коли ми хочемо подивитись, хто робив коміти по файлу, можемо використати :Gblame
і отримаємо зручний вивід авторів комітів. Так само можна застосувати :Gdiff
. Список усіх команд є в GitHub-репозиторії.
Наступний плагін — Xuyuanp/nerdtree-git-plugin, він використовується разом з плагіном Nerdtree. Про нього я вже писав у статті, присвяченій навігації у Vim, там ви можете подивитись, як його встановлювати. Плагін виділяє файли, які були модифіковані та не закомічені, це дозволяє нам побачити, що і в якій директорії потрібно додати до коміту.
Також у вищезгаданій статті ми розглядали плагін fzf.vim. Ознайомтесь з його функціоналом, встановіть і налаштуйте за інструкцією, а тоді поверніться до цього тексту. До всіх налаштувань, які ми розбирали в попередній статті, нам потрібно 2 рядки коду.
nnoremap <Leader>C :Commits<CR>
nnoremap <Leader>BC :BCommits<CR>
:Commits
— команда показує усі коміти, надає зручну навігацію по ним і детальну інформацію про кожен коміт в окремому вікні.
:BCommits
— робить все те саме, але підтягує коміти, що стосуються тільки поточного буфера (відкритого файла).
Плагін airblade/vim-gitgutter показує, які рядки коду були модифіковані, видалені або додані. Це не єдина його задача, детально почитати про функціонал найкраще у документації. Встановлюємо плагін у звичайний спосіб.
Plug 'airblade/vim-gitgutter'
Далі можемо використати команду :GitGutterEnable
, щоб показати інформацію. Для зручності варто додати до нашої конфігурації autocmd BufWritePost * GitGutter
, тоді при зберіганні файлу інформація буде оновлюватись автоматично.
Розглянемо також простий плагін rhysd/git-messenger.vim. Він дозволяє нам переглянути деяку інформацію про певний рядок. Для цього використовуємо <Leader>gm
. Плагін встановлюється так само, як попередні.
Plug 'rhysd/git-messenger.vim'
Детальніше про нього можна дізнатись з документації.
Наступний плагін mbbill/undotree дозволяє нам переміщатись по історії буфера. Він доволі простий і зрозумілий, тому не будемо акцентувати увагу на ньому. Встановлюємо плагін.
Plug 'mbbill/undotree'
Також додамо до наших конфігурацій рядок nnoremap <F5> :UndotreeToggle<cr>
. Тепер, коли ми натиснемо клавішу F5
, відкриється окреме вікно плагіна, де ми зможемо пересуватись по історії нашого буфера.
Останній плагін, який ми розглянемо, vim-airline/vim-airline. Він доволі функціональний і широкий, але його дії будуть знайомі усім, хто користувався сучасними редакторами коду або IDE. Плагін створює для нас статус-лінію, яка є дуже інформативною. Що стосується Git, вона показує поточну гілку, на якій ми зараз перебуваємо. Цей плагін дуже добре розширюється, тому найкраще буде ознайомитись з його документацією.
Набір цих плагінів допоможе комфортно працювати з Git, але у нас залишається проблема конфліктів. В сучасних редакторах є одразу чудовий функціонал для усування конфліктів, однак у Vim його немає.
Тому маємо 2 варіанти: перший — використати vimdiff
в якості mergetool
, але це на любителя. Другий варіант — встановити будь-яку іншу, їх є безліч, тому вибирайте на свій смак. Я використовую P4Merge
, тому можу порекомендувати її. Після того як ви встановили P4Merge
, додайте її глобально до Git. Для користувачів MacOs i Ubuntu це можна зробити так:
git config --global mergetool.p4merge.path /path/to/p4merge
git config --global merge.tool p4merge
git config --global mergetool.prompt false
Тоді спробуйте створити конфлікт і спульте зміни. Якщо все вказано корректно, то відкриється вікно p4merge
, де можна буде усунути конфлікти.
Ще немає коментарів