Configurer Neovim grâce à Lua



Dans cet article, nous verrons comment configurer Neovim. Nous configurerons l'éditeur au format .vim et au format lua. Cet article permettra de bien comprendre la configuration de Neovim et de pouvoir l'utiliser sur n'importe quel ordi, du plus ancien au plus récent.

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 gestionnaire de plugins lazy.nvim, il te faudra une version >= 0.11.2. Si ta distribution ne possède pas la dernière version, tu devras compiler Neovim manuellement.

On va récupérer la dernière 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ée.

Nous allons voir la configuration au format .vim. Si tu as déjà 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 splitright
set splitbelow
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 et indenter le texte.

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


: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.


Configurer Neovim au format Lua


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.options 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 :

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
  spec = {
    { import = "plugins" },
  },
})

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
    opts = {},
  },
  {
    "folke/tokyonight.nvim",
    lazy = false,
    priority = 1000,
  },
}
      

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.