Configurer Neovim grâce à Lua



Dans cet article, nous verrons comment configurer Neovim grâce au langage Lua.Nous verrons aussi comment avoir une config assez légère qui marche sur la plupart des ordis. Du pentium au i7/9 denière génération.

Si tu souhaites un IDE complet avec LSP (Language Server Protocol — qui gère la complétion de code, la coloration syntaxique et la détection d'erreurs) déjà configuré, le mieux est d'installer le plugin kickstart.nvim. Si tu préfères un éditeur plus léger, configurer à la carte, c'est par ici.


Compiler Neovim

Pour avoir accès au plugin manager Lazyvim,Il te faudra
une version >= 0.11.2. Si ta distribution ne possède par la dernière version, tu devras compiler Neovim manuellement.

On va récupèrer la dernier version

 git clone https://github.com/neovim/neovim.git
      

Et pour la compilation, ça se passe comme ça:

cd neovim
make CMAKE_BUILD_TYPE=Release
sudo make install

Tu auras différentes options de compilation:

  • Release Cette option ne retourne aucune information pour le déboguage et permet d'avoir une meilleure optimisation.
  • Debug: Debug permet d'avoir accès aux informations de déboguage, cette option sera utile en cas de déboguage avec GDB ou LLDB
  • RelWithDebInfo: Offre un compromis entre debug et optimisation

Configuration de Neovim


Neovim accepte la configuration au format .vim et au format .lua. La configuration au format Lua est un peu plus documenté.

Nous allons voir la configuration au format .vim. Si tu as déja un fichier de configuration et que tu souhaites tester des modifs sur un nouveau fichier sans polluer ta config. Tu peux utiliser cette commande:
nvim -u ton_fichier.vim

Voici mon init.vim

syntax on
let g:netrw_winsize=18
set colorcolumn=72
set smartcase
set ignorecase
set noswapfile
set nobackup
set autoindent
set number
set termguicolors
set cursorline
set signcolumn
set clipboard=unnamedplus
set encoding=utf-8
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
   

On va détailler toutes les options


Définir les options de reformatage

Neovim définit pas mal d options pour reformater le texte ( commenter les lignes suivantes...)

Tu trouveras pas mal de documentation grâce à la commande :help fo-table

t Auto-wrap text at textwidth while inserting c Auto-wrap comments at textwidth and insert the comment leader q Allow gq to format comments n Recognize numbered lists when formatting with gq j Remove comment leader when joining lines with J (Neovim default) l Do not break long lines if they were already long when insert mode began Add flags with +=, remove with -=.
:set verbose=1 formatoptions? 
Si tu souhaites avoir plus de détails sur les différentes options pour configurer Neovim, tu peux te rendre sur le wiki vimtricks.Tu auras accès à la doc qui t'explique de façon assez simple toutes les options.

Pour configurer Neovim en lua manuellement, il va falloir créer les répertoires et les fichiers de cette façon :

nvim/
├── init.lua
├── lazy-lock.json
└── lua
    ├── config
    │   └── lazy.lua
    └── plugins.lua
      

Dans le fichier init.lua, situé à la racine du répertoire nvim, je définis les vim.oions dont j'ai besoin ainsi que les différents alias que j'utilise pour naviguer dans mes notes.


Voilà mon fichier nvim/init.lua :

-- Lazy plugins manager
require("config.lazy")
require("plugins")

vim.schedule(function()
  vim.o.clipboard = 'unnamedplus'
end)

-- Colorscheme
vim.cmd[[colorscheme tokyonight]]

vim.o.netrw_winsize = 18
vim.o.splitright = true
vim.o.colorcolumn = '72'
vim.o.smartcase = true
vim.o.ignorecase = true
vim.o.swapfile = false
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.softtabstop = 2
vim.o.autoindent = true
vim.o.number = true
vim.o.relativenumber = false
vim.o.termguicolors = true
vim.o.cursorline = true
vim.o.signcolumn = "number"

-- Alias
vim.api.nvim_create_user_command('Nt', 'tabedit /media/usb/NOTES/index.md', {})
vim.api.nvim_create_user_command('Sppy', 'tabedit /media/usb/SNIPS/python/README.md', {})
vim.api.nvim_create_user_command('Spc', 'tabedit /media/usb/SNIPS/C/README.md', {})
vim.api.nvim_create_user_command('Sprst', 'tabedit /media/usb/SNIPS/rust/README.md', {})
      

On va documenter ça:

vim.o sert surtout à définir les options de réglage
vim.g sert à définir les options options globales

On va maintenant installer lazy.nvim, qui va nous servir de gestionnaire de plugins et permettra d'en installer de nouveaux facilement.
Tu trouveras toutes les informations sur ce plugin à l'adresse suivante : lazy.folke.io/installation.

Il suffit de copier le contenu ci-dessous dans le fichier lua/config/lazy.lua :

      

J'ajoute ensuite tous mes plugins dans le fichier lua/plugins.lua. Pour ma part, je n'utilise que indent-blankline et le thème tokyonight.
Mon fichier plugins.lua ressemble à ça :

return {
  {
    "lukas-reineke/indent-blankline.nvim",
    main = "ibl",
    ---@module "ibl"
    ---@type ibl.config
    vim.os = {},
  },
  {
    "folke/tokyonight.nvim",
    lazy = false,
    priority = 1000,
    vim.os = {},
  },
}
      

Et voilà ! Lorsque tu démarres Neovim, une fenêtre devrait s'afficher pour indiquer l'installation des plugins. Tu as maintenant une base propre et minimaliste, prête à être enrichie selon tes besoins.