Il y a quelques mois j’ai refait ma configuration neovim pour tenter de me débarrasser d’un maximum de plugins étant donné que neovim embarque beaucoup de fonctionnalités (évidemment le lsp étant la chose la plus évidente).
Je reste tout de même avec 17 plugins installés donc je suis assez loin d’une configuration OOTB à la helix.
Pour la gestion des plugins ma configuration neovim n’utilise pas le populaire gestionnaire de plugins lazy.vim mais directement celui de neovim.
Pour ma config j’ai voulu aussi tenter d’utiliser des fonctionnalités de neovim un peu moins mises en avant, comme la lecture automatique des fichiers mis dans le dossier plugin dans sa config neovim (~/.config/nvim/plugin/*.lua).
Avec un ./plugin/foo.lua contenant :
vim.print("foobarbaz")
en lançant nvim on aura directement foobarbaz affiché dans vim.
En utilisant cette feature de neovim on peut se passer d’avoir un init.lua qui require tous les fichiers de configuration nécessaire.
À savoir que les fichiers contenus dans /plugin sont lus dans l’ordre alphabétique de leur nom. Pour ma part je souhaite que le fichier qui gère l’installation des plugins soit le premier lu, pour que les autres qui vont gérer des choses liées au lsp aient déjà les plugins chargés.
Pour cela je crée un fichier +plugin.lua, avec ce + on s’assure que ce fichier sera lu en premier.
-- ./plugin/+plugin.lua
Maintenant pour l’installation des plugins, comme écrit plus haut j’utilise vim.pack pour les installer, mais je souhaitais tout de même garder la feature de lazy loading très intéressante de lazy. Et heureusement il existe justement des plugins spécialement faits pour cela :
Pour ma part j’utilise lze, je ne sais absoluement pas si lz.ne est mieux.
Son utilisation est simple et similaire a l’api de lazy:
-- ./plugin/+plugin.lua
require('lze').load({
-- ici le plugin nvim-tree sera chargé uniquement après avoir exécuté l'un des deux raccourcis via la fonction after
{
"nvim-tree.lua" --
keys = {
{ "<leader>bo", ":NvimTreeFindFileToggle<cr>", silent = true },
{ "<leader>bf", ":NvimTreeFindFile<cr>", silent = true },
},
after = function()
require("nvim-tree").setup({ view = { side = "right" } })
end,
},
-- même principe, le plugin sera chargé dès que l'événement vim est exécuté
{
"nvim-autopairs",
event = "InsertEnter",
after = function()
require("nvim-autopairs").setup()
end,
},
-- on charge ce plugin quand le colorscheme en question est chargé
{
"tokyonight.nvim",
colorscheme = "tokyonight-night",
after = function()
require("tokyonight").setup()
end,
},
-- pour certains plugins on souhaite les charger directement sans lazy load, il suffit de rajouter le `lazy = false`
{
"mason.nvim",
lazy = false,
after = function()
require("mason").setup()
end,
},
})
Pour lazy load j’utilise uniquement les attributs keys et event (et un colorscheme), lze a plusieurs options liées au lazyload et cela est expliqué dans le README.
Si on revient à la gestion des plugins via neovim il faut pouvoir les télécharger mais ne pas les charger dans l’éditeur, ou plutôt il faut uniquement charger lze:
-- ./plugin/+plugin.lua
vim.pack.add({
"https://github.com/BirdeeHub/lze",
}, { load = true }) -- load = true doit être spécifié si on charge les plugins depuis /plugin
vim.pack.add({
"https://github.com/nvim-tree/nvim-tree.lua",
"https://github.com/folke/tokyonight.nvim",
"https://github.com/mason-org/mason.nvim",
}, { load = function() end, confirm = true })
require('lze').load({
... -- comme plus haut
})
Pour les plugins c’est tout, je lance peut-être 1 fois par jour :lua vim.pack.update(), je n’ai pour le moment eu aucun problème lié à cette gestion des plugins.