Менеджер плагінів для NeoVim: lazy.nvim

Як почати з менеджерами плагінів

Що таке lazy?

Хоч я і люблю NeoVim, інколи його налаштування можуть бути складними. Він чудово виконує багато завдань, але установка і оновлення плагінів — не одна з них. Саме тому розробники третіх сторін прийшли на допомогу. Є кілька популярних менеджерів плагінів: packer, plug та мій улюблений lazy.

Перш ніж продовжити, потрібно розібратися з конфліктом у назвах. Є lazy — менеджер плагінів, часто званий lazy.nvim, і є lazy — дистрибуція Vim, яка зазвичай називається LazyVim. Дистрибуція — це попередньо упакований набір NeoVim, плюс вибрані та налаштовані плагіни. У цій статті йдеться саме про менеджер плагінів lazy.nvim.

Як встановити lazy.nvim

Ми будемо слідувати інструкціям на сайті lazy.nvim за посиланням https://lazy.folke.io/installation. Одна з заплутаних частин використання neovim полягає в тому, що є так багато способів організувати ваші конфігураційні файли. Перш за все, ви можете використовувати vimscript, мову сценаріїв, яка працює тільки в vim, або ви можете використати lua. Оскільки ми використовуємо neovim, оберемо lua.

NeoVim буде шукати ваш конфігураційний файл за шляхом ~/.config/nvim/init.lua. Тож створіть цей каталог і файл. У ньому має бути лише текст:

require("config.lazy")

Це вказує на те, щоб NeoVim відкрив і виконав ваш конфігураційний файл для lazy. Це трохи оманливо, оскільки файл ~/.config/nvim/init.lua припускає, що все, що він читає, знаходиться в каталозі ~/.config/nvim/lua. Отже, цей конфігураційний файл насправді буде знаходитися за шляхом ~/.config/nvim/lua/config/lazy.lua. Перейдіть до інструкцій з встановлення lazy.nvim і скопіюйте наданий текст. На цей момент текст виглядає так:

-- Bootstrap lazy.nvim  
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"  
if not (vim.uv or vim.loop).fs_stat(lazypath) then  
 local lazyrepo = "https://github.com/folke/lazy.nvim.git"  
 local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })  
 if vim.v.shell_error ~= 0 then  
 vim.api.nvim_echo({  
 { "Failed to clone lazy.nvim:\n", "ErrorMsg" },  
 { out, "WarningMsg" },  
 { "\nPress any key to exit..." },  
 }, true, {})  
 vim.fn.getchar()  
 os.exit(1)  
 end  
end  
vim.opt.rtp:prepend(lazypath)  

-- Make sure to setup `mapleader` and `maplocalleader` before  
-- loading lazy.nvim so that mappings are correct.  
-- This is also a good place to setup other settings (vim.opt)  
vim.g.mapleader = " "  
vim.g.maplocalleader = "\\"  

-- Setup lazy.nvim  
require("lazy").setup({  
 spec = {  
 -- import your plugins  
 { import = "plugins" },  
 },  
 -- Configure any other settings here. See the documentation for more details.  
 -- colorscheme that will be used when installing plugins.  
 install = { colorscheme = { "habamax" } },  
 -- automatically check for plugin updates  
 checker = { enabled = true },  
})

Цей скрипт lua виконує три функції. Перше, він ініціалізує lazy.nvim, перевіряючи, чи встановлено lazy.nvim. Якщо ні, то neovim завантажить його з github.

По-друге, він встановлює ваші клавіші лідера та локального лідера. Якщо ви не знаєте, що це, залиште їх за замовчуванням.

І нарешті, він завантажує lazy.nvim, імпортує плагіни, встановлює кольорову схему за замовчуванням і налаштовує lazy для автоматичних оновлень.

Далі потрібно створити каталог для плагінів за адресою ~/.config/nvim/lua/plugins. Тут ми розмістимо всі інструкції для завантаження плагінів.

Додавання плагінів

Плагіни додаються шляхом створення lua файлів в каталозі ~/.config/nvim/lua/plugins. Додамо наш перший плагін — простий плагін для форматування таблиць markdown. Створіть файл ~/.config/nvim/lua/plugins/nvim-markdown-tables.lua.
Додайте наступний текст.

return {  
 'donovanhubbard/markdown-tables.nvim',  
 ft = markdown,  
 keys = {  
 vim.keymap.set("v", "ft", ":FormatTable"),  
 }  
}

Тут є кілька моментів, на які варто звернути увагу. По-перше, всі специфікації плагінів повинні повертати таблицю lua. Перший елемент у таблиці повинен бути адресою на GitHub для вихідного коду. У цьому випадку другий елемент — це ключове слово ft, що означає "filetype" (тип файлу). За замовчуванням плагіни завантажуються тільки тоді, коли їх викликають. Цей додаток працює тільки з markdown-файлами, тому ми хочемо, щоб він завантажувався лише для таких файлів. Якщо ви хочете, щоб плагін завжди завантажувався, замініть на lazy = false,. Останній елемент задає клавіші, які ви будете використовувати для плагіна.

vim.keymap.set("v", "ft", ":FormatTable"),

Це означає, що якщо ви знаходитесь у візуальному режимі і натискаєте клавішу лідера (за замовчуванням пробіл), а потім вводите символи f і t, то викликається lua-функція :FormatTable, яка активує плагін.

Давайте додамо інший плагін. Цього разу додамо тему Tokyo Night. Створіть новий файл за адресою ~/.config/nvim/lua/plugins/tokyo-night.lua. Напишіть наступне.

return {  
 "folke/tokyonight.nvim",  
 lazy = false,  
 priority = 1000,  
 opts = {},  
}

Знову ми бачимо, що повертається таблиця, першим елементом якої є адреса на GitHub для коду. У цьому випадку ми хочемо, щоб плагін завжди завантажувався, тому ставимо lazy = false. Ми вказуємо пріоритет, який визначає порядок завантаження плагінів. Також ми задаємо opts зі значенням за замовчуванням {}.

Тестування плагінів

Нарешті, відкрийте neovim, і ви побачите вікно, яке показує статус усіх ваших плагінів.

pic

Воно має автоматично встановити всі завантажені плагіни. Для перевірки наявності оновлень натискайте shift + u. Щоб примусово запустити установку, якщо вони виконуються автоматично, ви можете натискати shift + i. Щоб вийти, натискайте q.

Якщо ви хочете знову викликати це вікно, виконайте команду :lazy.

Висновок

Існує цілий світ плагінів, і ви можете дійсно зайти в них з головою. Є багато інших варіантів плагінів, які ми не використовували, тому обов'язково ознайомтесь з документацією до lazy.nvim. Успішного vim'інгу!

Перекладено з: NeoVim Plugin Manager: lazy.nvim