| compiler | ||
| ftplugin | ||
| lua/custom | ||
| plugin | ||
| init.lua | ||
| lazy-lock.json | ||
| main.py | ||
| nvim-pack-lock.json | ||
| README.md | ||
Config refactor (v2.0)
Useful links
Основные прицнипы формирования конфига
Root plugin папка
Скрипты в этой папке загружаются автоматически после инициализации neovim, но до загрузки файлов типа ftplugin/ или after/.
Plugins
Плагины ставятся встроенным менеджером vim.pack (Neovim 0.12+), см. раздел Работа с vim.pack.
Разберем на примере oil.nvim: источник плагина указывается в списке vim.pack.add в lua/custom/pack.lua:
lua/custom/pack.lua
vim.pack.add({
gh("echasnovski/mini.icons"),
gh("stevearc/oil.nvim"),
})
require("mini.icons").setup()
require "custom.oil"
Затем сама функция настроек расположена отдельно, в файле с названием плагина:
lua/custom/oil.lua
require("oil").setup{
opts = {
keymaps = {
["g?"] = "actions.show_help",
},
},
}
Разница между ftplugin и after/ftplugin
Суть одна и та-же: загрузка конфигураций для конкретных типов файлов, однако:
ftplugin
Тут храняться настройки, которые будут применены до загразуки плагинов. Т.е. настройки, что определны где-то в настройках плагинов будут переписывать если что те, которые установлены для типов файлов тут
after/ftplugin
Настройки для типов файлов тут будут применены уже после того, как загрузится все содержимое neovim => эти настройки будут перегружать все то, что было настроено в плагинах
Работа с vim.pack
Плагины описаны в lua/custom/pack.lua, версии зафиксированы в nvim-pack-lock.json (его нужно коммитить). Плагины ставятся в ~/.local/share/nvim/site/pack/core/opt.
| Задача | lazy.nvim | vim.pack |
|---|---|---|
| Установить плагин | добавить spec, :Lazy install |
добавить в vim.pack.add({...}) и перезапустить, недостающее ставится при старте с подтверждением |
| Обновить все | :Lazy update |
:lua vim.pack.update(), откроется буфер с диффом |
| Обновить один | :Lazy update name |
:lua vim.pack.update({"name"}) |
| Применить обновление | кнопка в UI | :write в буфере с диффом |
| Отклонить обновление | закрыть окно | закрыть буфер (:quit) |
| Список плагинов | :Lazy |
:lua vim.print(vim.pack.get()) |
| Удалить | убрать spec, :Lazy clean |
убрать из pack.lua, затем :lua vim.pack.del({"name"}) |
| Откатить к lock-файлу | :Lazy restore |
:lua vim.pack.update(nil, {target = "lockfile"}) |
| Lock-файл | lazy-lock.json |
nvim-pack-lock.json |
| Профилирование | :Lazy profile |
nvim --startuptime out.log |
Порядок обновления: :lua vim.pack.update() → прочитать дифф → :write → перезапустить nvim → закоммитить nvim-pack-lock.json.
Парсеры treesitter обновляются вручную командой :TSUpdate.
Чего нет по сравнению с lazy
- Нет окна
:Lazy, всё делается командами и через буфер диффа. - Нет ленивой загрузки (
event,cmd,ft,keys), плагины грузятся при старте. - Нет
dependencies,optsиconfig: зависимости перечисляются вvim.pack.add, аsetup()вызывается вручную. - Нет хука
build. Вместо него автокомандаPackChanged, которую нужно объявить доvim.pack.add(пример дляmarkdown-previewвpack.lua).
Версии
Без version плагин следует за веткой по умолчанию. Версию можно зафиксировать:
{ src = gh("L3MON4D3/LuaSnip"), version = vim.version.range("2.*") }
FAQ
Зачем так мучаться? Не проще все кидать в один файл?
Проще, но такое распараллеливание позволяет легче дебажить файлы настроек. Т.е. исправляя настройки мы можем просто sourceить файл настроек, не трогая список плагинов в pack.lua.
Что делать, если в
checkhealthвыдается ошибкаluarocks not found?
Необходимо его установить по инструкции с сайта
Что делать, если при установке
luarocksвыдает ошибку что не найдены.hфайлы?
Надо установить хэдеры lua командой:
sudo apt install liblua5.3-dev
checkhealth не может найти tree-sitter cli
Надо установить соответствующий npm пакет:
npm install -g tree-sitter-cli