91 lines
5.9 KiB
Markdown
91 lines
5.9 KiB
Markdown
# Config refactor (v2.0)
|
||
## Useful links
|
||
- [Переписывание конфига с автором telescope](https://www.youtube.com/watch?v=kJVqxFnhIuw&t=510s)
|
||
- [Документация по Lua в Nvim](https://neovim.io/doc/user/lua-guide.html)
|
||
- [Конфиг TJ](https://github.com/tjdevries/config.nvim/tree/master)
|
||
## Основные прицнипы формирования конфига
|
||
### Root plugin папка
|
||
Скрипты в этой папке загружаются автоматически после инициализации `neovim`, но до загрузки файлов типа `ftplugin/` или `after/`.
|
||
### Plugins
|
||
Плагины ставятся встроенным менеджером `vim.pack` (Neovim 0.12+), см. раздел [Работа с vim.pack](#работа-с-vimpack).
|
||
Разберем на примере `oil.nvim`: источник плагина указывается в списке `vim.pack.add` в `lua/custom/pack.lua`:
|
||
*lua/custom/pack.lua*
|
||
```lua
|
||
vim.pack.add({
|
||
gh("echasnovski/mini.icons"),
|
||
gh("stevearc/oil.nvim"),
|
||
})
|
||
require("mini.icons").setup()
|
||
require "custom.oil"
|
||
```
|
||
Затем сама функция настроек расположена отдельно, в файле с названием плагина:
|
||
*lua/custom/oil.lua*
|
||
```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` плагин следует за веткой по умолчанию. Версию можно зафиксировать:
|
||
```lua
|
||
{ src = gh("L3MON4D3/LuaSnip"), version = vim.version.range("2.*") }
|
||
```
|
||
# FAQ
|
||
> Зачем так мучаться? Не проще все кидать в один файл?
|
||
|
||
Проще, но такое распараллеливание позволяет легче дебажить файлы настроек. Т.е. исправляя настройки мы можем просто `source`ить файл настроек, не трогая список плагинов в `pack.lua`.
|
||
|
||
> Что делать, если в `checkhealth` выдается ошибка `luarocks not found`?
|
||
|
||
Необходимо его установить по инструкции с [сайта](https://luarocks.org/)
|
||
|
||
> Что делать, если при установке `luarocks` выдает ошибку что не найдены `.h` файлы?
|
||
|
||
Надо установить хэдеры lua командой:
|
||
```bash
|
||
sudo apt install liblua5.3-dev
|
||
```
|
||
|
||
> checkhealth не может найти tree-sitter cli
|
||
|
||
Надо установить соответствующий `npm` пакет:
|
||
```js
|
||
npm install -g tree-sitter-cli
|
||
```
|
||
|