Vincent Barrault

Commencer une configuration pour NVIM en lua

Commencer une configuration pour NVIM en lua

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.

~/.config/nvim/init.lua
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.

~/.config/nvim/lua/mymodule.lua
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:

~/.config/nvim/init.lua
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:

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:

~/.config/nvim/mymodule/init.lua
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:

~/.config/nvim/mymodule/foo.lua
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é.