Table des matières
Creer un fichier init.lua
La première chose à faire est de créer un fichier init.lua
dans le répertoire ~/.config/nvim/
.
C'est le point d'entrée de notre configuration.
vim.opt.number = true
vim.opt.relativenumber = true
-- ...
Si je relance NVIM, je peux voir les numérorations des lignes relatives à la position du curseur.
Les modules
Si je rajoute toute ma configuration dans ce fichier, il va rapidement devenir illisible.
Heureusement, il est possible avec LUA de ségmenter son code sous forme de modules.
Pour creer un module, je vais rajouter le fichier mymodule.lua
dans le dossier ~/.config/nvim/lua/
.
Le nom du dossier lua
est très important, car c'est dans celui ci que le script va chercher les modules.
local M = {}
local localVariable = 'toto'
function M.doSomething()
-- Write stuff here...
localVariable = 'tata'
end
return M
Pour faire un module, je crée une variable local M
que je retourne à la fin du fichier.
De cette façon, tout ce qui est dans M
sera disponible en dehors du module, mais toutes les autres variables et functions ne le seront pas.
Comme par exemple localVariable
.
Et depuis mon fichier de configuration principale, je peux appeler mon module comme ceci:
require'mymodule'.doSomething()
-- ou
local mymodule = require'mymodule'
mymodule.doSomething()
Le contenu de mymodule
est mis en cache pendant l'execution, ce qui veux dire que l'état du module est partagé à tous les endroits où il est requis.
Ce qui veux dire, par exemple, que la valeur de la variable localVariable
sera la même pour tout mes autres modules.
Les indexes (init.lua)
Quand on appel le nodule mymodule
comme ceci:
require'mymodule'
Le fichier chargé peut être:
- ~/.config/nvim/mymodule.lua
- ~/.config/nvim/mymodule/init.lua
Ce qui veut dire que le fichier init.lua permet de faire un index de dossier pour inclure implicitement d'autres modules.
Je peux avoir plusieurs niveau de modules comme ceci:
require'mymodule.foo' -- -> ~/.config/nvim/lua/mymodule/foo.lua
Attention, le chemin n'est pas relatif ! Ce qui veut dire qu'il faut bien penser à écrire mymodule.foo
et non pas juste foo
.
Malgré que je soit déjà dans le module mymodule
.
Cet identifiant sert au programe de clef de cache pour ne pas avoir à recharger un module déjà existant.
Il est aussi possible d'appeler aussi le module avec le chemin mymodule.foo.init
, mais j'évite de le faire
pour garder mon code uniforme et éviter les erreurs, et qu'un même module soit chargée deux fois.
Dans le sous module, j'ai le code suivant:
local M = {}
-- write code here
return M
Conclusion
Pour bien commencer une configuration NVIM, je pars sur du LUA plutôt que de faire du VimScript.
Pour cela, il me suffit de créer un fichier init.lua
dans le dossier ~/.config/nvim
.
Puis je ségmente au fûr et à mesure ma configuration en modules pour garder un code lisible et oragnisé.