Официальный сайт lazy.nvim: lazy.folke.io
Далее кусок кода с оф. сайта – для установки 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({
})
Установим плагин hop (т.е. добавим его в setup):
require("lazy").setup({
{ 'phaazon/hop.nvim' }
})
Так тоже можно:
require("lazy").setup({
spec = {
{
'phaazon/hop.nvim',
branch = 'v2',
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
}
})
Явно указывать spec не обязательно. Можно воспользоваться короткой формой записи:
require("lazy").setup({
{
'phaazon/hop.nvim',
branch = 'v2',
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
})
lazy.nvim устроен так, что если первый аргумент не содержит ключа spec, то первый аргумент считается таблицей плагинов (т.е. spec). Если же есть ключ spec, то lazy.nvim использует его.
Помимо spec, есть ещё другие ключи:
require("lazy").setup({
spec = {
{ ... }
},
default = { ... },
install = { ... },
event = { ... },
cmd = { ... },
checker = { ... },
opts = { ... }
})
checker – это настройка lazy.nvim для автоматической проверки обновлений плагинов.
opts – это параметры, которые передаются в функцию setup.
То есть:
require("lazy").setup({
{
'phaazon/hop.nvim',
branch = 'v2',
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' },
create_hl_autocmd = false,
jump_on_sole_occurrence = true,
end
}
})
-- То же самое:
require("lazy").setup({
{
'phaazon/hop.nvim',
branch = 'v2',
opts = {
keys = 'etovxqpdygfblzhckisuran',
create_hl_autocmd = false,
jump_on_sole_occurrence = true,
}
}
})
-- То же самое, но избыточно и бессмысленно:
require("lazy").setup({
{
'phaazon/hop.nvim',
branch = 'v2',
opts = {
keys = 'etovxqpdygfblzhckisuran',
create_hl_autocmd = false,
jump_on_sole_occurrence = true,
}
config = function(_, opts)
require'hop'.setup(opts)
end
}
})
Попробуем применить цветовую схему после установки:
require("lazy").setup({
spec = {
{ ... }
},
default = { ... },
install = { colorscheme = { "lunaperche" } }
})
Здесь после установки любого плагина включится цветова схема "lunaperche". Она применится именно в процессе установки в том же сеансе, безе перезагрузки nvim. Но после перезагрузки nvim вернётся схема по умолчанию.
А чтобы схема не слетала после перезагрузки nvim, то сделаем так:
require("lazy").setup({
spec = {
{ ... }
},
install = { colorscheme = { "lunaperche" } }
})
vim.cmd('colorscheme habamax')
При таком раскладе в процессе установки плагина мы будем видеть схему lunaperche, но после установки сразу применится habamax.
Можно переопределить настройки плагина:
require("lazy").setup({
spec = {
{
'phaazon/hop.nvim',
branch = 'v2',
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
},
install = { colorscheme = { "murphy" } }
})
-- Переопределяем ключ keys:
require'hop'.setup { keys = '12345' }
vim.cmd('colorscheme habamax')
Ключ event:
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Плагин загрузится при первом чтении файла:
event = "BufRead"
})
vim.cmd('colorscheme habamax')
При любом открытии файла:
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Плагин загрузится при любом открытии файла:
event = { "BufReadPost", "BufNewFile" }
})
vim.cmd('colorscheme habamax')
для определённых типов файлов:
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Плагин загрузится только при открытии .js-файлов:
event = { "BufRead *.js", "BufNewFile *.js" }
})
vim.cmd('colorscheme habamax')
для определённых типов файлов (ориентируется на filetype, а не на расширение):
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Загрузится только когда filetype станет "javascript":
ft = "javascript"
})
vim.cmd('colorscheme habamax')
Вот пример конфигурации, где при старте nvim не загружается плагин hop.nvim:
require("lazy").setup({
spec = {
{
'phaazon/hop.nvim',
branch = 'v2',
event = { "InsertEnter", "BufRead" },
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
},
install = { colorscheme = { "murphy" } }
})
vim.cmd('colorscheme habamax')
Здесь нужно обратить внимание на event.
InsertEnter срабатывает, когда мы переходим в режим вставки. А BufRead – когда открываем файл. Таким образом, если мы просто запустили nvim, не открывая файл, то плагин не загрузится. Но стоит только открыть файл, или начать печатать текст, как сразу подгружается плагин hop.nvim.
А что, если мы хотим вручную подгрузить плагин? Тогда делаем так:
:Lazy load hop.nvim
Ещё можно загружать плагин по команде. Я хочу, чтобы при первом открытии nvim были доступны только две команды: HopWord и HopChar1. И только когда я выполню одну из них, плагин подгужается и мне становятся доступны все остальные команды. Реализовать это можно так:
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Загрузится только когда filetype станет "javascript":
cmd = { "HopWord", "HopChar1" } -- загрузить только при вызове команды
})
vim.cmd('colorscheme habamax')
Первый вариант:
vim.g.mapleader = " "
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Загрузится после нажатия "пробел, h, w"
keys = { "<leader>hw" }
})
vim.cmd('colorscheme habamax')
Второй вариант:
vim.g.mapleader = " "
require("lazy").setup({
spec = { ... },
install = { colorscheme = { "murphy" } },
-- Загрузится после нажатия "пробел, h, w"
keys = {
{ "<leader>kb", "<cmd>HopWord<cr>", desc = "Kakashka" },
},
})
vim.cmd('colorscheme habamax')
Первый вариант – Говорит lazy.nvim: "Загрузи плагин когда пользователь нажмёт <leader>hw", НО не назначает саму команду!
Второй вариант – Загружает плагин при нажатии <leader>kb. Назначает клавишу, которая выполняет <cmd>HopWord<cr>. После первого нажатия — плагин загружен и клавиша работает.
Событие VeryLazy – это специальное событие lazy.nvim, которое означает: загрузиться как можно позже, но до первого использования.
require("lazy").setup({
spec = { ... },
install = { ... },
-- Загрузится как можно позже:
event = "VeryLazy"
})
vim.cmd('colorscheme habamax')
В отдельном файле мы должны вернуть список плагинов (у нас только один плагин):
-- ~/.config/nvim/lua/plugins/init.lua
return {
{
'phaazon/hop.nvim',
branch = 'v2',
-- event = { "InsertEnter", "BufRead" },
cmd = { "HopWord", "HopChar1" }, -- загрузить только при вызове команды
keys = { "hw" },
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
}
А здесь мы импортируем все плагины из папки plugins:
-- ~/.config/nvim/init.lua
-- 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)
require("lazy").setup({
spec = {
{ import = "plugins" }, -- Импорт всех плагинов из модуля
},
})
vim.cmd('colorscheme habamax')
-- ~/.config/nvim/lua/plugins/hop.lua
return {
{
'phaazon/hop.nvim',
branch = 'v2',
-- event = { "InsertEnter", "BufRead" },
cmd = { "HopWord", "HopChar1" }, -- загрузить только при вызове команды
keys = { "hw" },
config = function()
-- you can configure Hop the way you like here; see :h hop-config
require'hop'.setup { keys = 'etovxqpdygfblzhckisuran' }
end
}
}
Импортируем hop из папки plugins:
-- ~/.config/nvim/init.lua
-- 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)
require("lazy").setup({
spec = {
{ import = "plugins.hop" }, -- Импортируем hop из папки plugins
},
})
vim.cmd('colorscheme habamax')
Вот так выглядит сам плагин:
-- ~/.config/nvim/lua/plugins/treesitter.lua
return {
'nvim-treesitter/nvim-treesitter',
lazy = false,
build = ':TSUpdate',
config = function()
require'nvim-treesitter'.install { "javascript", "typescript", "html", "css", "lua" }
end
}
И импортируем Tree-sitter в главный init.lua:
-- ~/.config/nvim/init.lua
require("lazy").setup({
spec = {
{ import = "some_plugin" },
{ import = "plugins.treesitter" },
},
})
-- Запускаем Tree-sitter:
vim.treesitter.start()
При первом запуске nvim treesitter запустится. Но если мы в этом же сеансе откроем ещё один файл, то treesitter в нём не запустится.
Если мы хотим в самом nvim включить или отключить подсветку tree-sitter, то это можно сделать так:
-- Включить treesitter:
:lua vim.treesitter.start()
-- Выключить treesitter:
:lua vim.treesitter.stop()
Проверить для текущего буфера, включён ли treesitter:
:lua print(vim.treesitter.highlighter.active[vim.api.nvim_get_current_buf()] ~= nil)
# true → Tree-sitter сейчас включён для этого буфера
# false → не включён
ВАЖНЫЙ МОМЕНТ!!! Для Lua treesitter по умолчанию включён ВСЕГДА!! Можно не прописывать vim.treesitter.start().
Запускать treesitter для определённых типов файлов:
vim.api.nvim_create_autocmd('FileType', {
pattern = { 'javascript', 'typescript', 'html', 'css', 'lua' },
callback = function() vim.treesitter.start() end,
})
Разница с предыдущим примером в том, что подсветка будет работать всегда для указанных типов файлов.
Второй способ запустить treesitter для определённых типов файлов. Создаём в ~/.config/nvim/ftplugin/ файл с именем типа файла и пишем в него:
-- ~/.config/nvim/ftplugin/html
vim.treesitter.start()
-- ~/.config/nvim/ftplugin/javascript
vim.treesitter.start()
При таком раскладе подсветка treesitter будет активирована для файлов html и javascript.
Вот так добавляем плагин:
~/.config/nvim/lua/plugins/neotree.lua
return {
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
"nvim-tree/nvim-web-devicons", -- optional, but recommended
},
lazy = false, -- neo-tree will lazily load itself
}
}
Прикольные темы
lala