t0vim/README.md
2026-10-11 15:01:58 +03:00

91 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```