# 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 Разберем на примере `oil.nvim`: Сначала базовые настройки, такие как инструкция откуда качать и всякие зависимости и атрибуты по типу приоритета кладутся в директорию `custom/plugins` в виде названия плагина: *lua/custom/plugins/oil.lua* ```lua return { "stevearc/oil.nvim", dependencies = { { "echasnovski/mini.icons", opts = {} } }, config = function() require "custom/oil" end, } ``` Затем, как можно видеть, сама функция настроек расположена отдельно в файле с идентичным названием, но в директории "повыше": *lua/custom/oil.lua* ```lua require("oil").setup{ opts = { keymaps = { ["g?"] = "actions.show_help", }, }, } ``` ## Разница между ftplugin и after/ftplugin Суть одна и та-же: загрузка конфигураций для конкретных типов файлов, однако: ### ftplugin Тут храняться настройки, которые будут применены **до** загразуки плагинов. Т.е. настройки, что определны где-то в настройках плагинов будут переписывать если что те, которые установлены для типов файлов тут ### after/ftplugin Настройки для типов файлов тут будут применены уже после того, как загрузится все содержимое neovim => эти настройки будут перегружать все то, что было настроено в плагинах ## Включение / Выключение некоторых плагинов Из за возникновения случаев, когда некоторые плагины на некоторых машинах не нужно включать (например obsidian мне нужен только на хостовых машинах, на удаленных он будет только мешать открывать .md файлы), то в `init.lua` у меня в самом начале устанавливаются для таких плагинов глобальные переменные со следующей семантикой: ``` vim.g._enabled = ``` Например: ```lua vim.g.obsidian_enabled = false ``` Это позволяет динамически включать/выключать плагины без необходимости усложнять конфиг `lazy` # FAQ > Зачем так мучаться? Не проще все кидать в один файл? Проще, но такое распараллеливание позволяет легче дебажить файлы настроек. Т.е. исправляя настройки мы можем просто `source`ить файл настроек, не трогая конфигурации скачивания файлов, чтобы лишний раз не триггерить Lazy. > Что делать, если в `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 ```