L’API Lua de Neovim
Découvrez comment les extensions s’intègrent.
L’API Lua de Neovim est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.
Pourquoi Lua dans Neovim
Neovim intègre un environnement d’exécution LuaJIT, ce qui fait de Lua le langage de script natif aux côtés de Vimscript. Les auteurs d’extensions préfèrent Lua pour sa rapidité, ses véritables structures de données et son système de modules clair.
La table globale vim donne accès à tout : l’état de l’éditeur, l’API, les options et les fonctions auxiliaires de la bibliothèque standard. La maîtriser constitue le fondement du développement moderne d’extensions.
print(vim.inspect(vim.version()))La couche vim.api
vim.api expose l’API distante de bas niveau : toutes les fonctions préfixées par nvim_. Ce sont les mêmes appels que ceux utilisés par les clients externes via RPC, mais ils s’exécutent instantanément au sein du processus.
Des fonctions comme nvim_get_current_buf, nvim_buf_set_lines et nvim_command offrent un contrôle précis. Elles sont stables, bien documentées et constituent le socle des extensions sérieuses.
local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)vim.fn — Appeler des fonctions Vimscript
vim.fn fait le lien avec les fonctions intégrées de Vimscript. Toute fonction appelable dans Vimscript, comme expand() ou fnamemodify(), est accessible sous la forme vim.fn.expand(...).
C’est particulièrement utile lorsqu’aucune API native n’existe encore. Les arguments et les valeurs de retour sont automatiquement convertis entre les types Lua et Vimscript.
local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)Options : vim.o, vim.bo, vim.wo
Les options sont définies au moyen de métatables. vim.o cible les options globales, vim.bo celles propres au tampon et vim.wo celles propres à la fenêtre.
Une simple affectation de champ suffit. Cela remplace les appels verbeux à nvim_set_option et se lit naturellement dans le code de configuration.
vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = falsevim.g et les variables globales
vim.g lit et écrit les variables globales de Vim. Les extensions y exposent souvent des options de configuration, comme vim.g.myplugin_enabled.
La lecture d’une variable non définie renvoie nil ; prévoyez donc des valeurs par défaut. Des variantes propres au tampon et à la fenêtre existent sous la forme de vim.b et vim.w.
vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)Notifications et écho
Utilisez vim.notify pour afficher des messages à l’utilisateur. Cette fonction accepte une chaîne de message et un niveau de journalisation facultatif provenant de vim.log.levels.
Les gestionnaires d’extensions comme noice ou notify peuvent intercepter ces messages pour offrir une interface plus agréable. Préférez vim.notify à l’affichage brut avec print pour les messages destinés à l’utilisateur.
vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)Planification avec vim.schedule
Certains appels d’API sont interdits dans les contextes d’événements rapides, notamment à l’intérieur de certains rappels. vim.schedule reporte une fonction dans la boucle principale, où l’ensemble de l’API peut être utilisé sans risque.
Cela évite les erreurs redoutées E5560 lors de la modification de tampons depuis des contextes asynchrones ou de commandes automatiques.
vim.schedule(function()
vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)Commandes automatiques en Lua
nvim_create_autocmd enregistre des gestionnaires d’événements. Regroupez-les avec nvim_create_augroup et définissez clear = true pour éviter les doublons lors d’un rechargement.
Le rappel reçoit une table d’événement contenant des champs comme buf et match, ce qui fournit au gestionnaire un contexte précis.
local grp = vim.api.nvim_create_augroup('MyGrp', { clear = true })
vim.api.nvim_create_autocmd('BufWritePost', {
group = grp,
pattern = '*.lua',
callback = function(ev) print('saved ' .. ev.file) end,
})vim.tbl et utilitaires pour les chaînes
Neovim fournit une riche bibliothèque standard. vim.tbl_extend, vim.tbl_keys et vim.split couvrent les manipulations courantes des tables et des chaînes.
vim.tbl_deep_extend('force', defaults, opts) est la méthode de référence pour fusionner la configuration de l’utilisateur avec les valeurs par défaut de l’extension.
local defaults = { width = 40, border = 'single' }
local opts = { width = 60 }
local cfg = vim.tbl_deep_extend('force', defaults, opts)
print(cfg.width, cfg.border)vim.inspect pour le débogage
vim.inspect sérialise toute valeur Lua en une chaîne lisible, y compris les tables imbriquées. C’est le moyen le plus rapide de comprendre la forme des valeurs renvoyées par l’API.
Associez-le à :lua print(vim.inspect(...)) ou à :lua= expr dans les versions récentes de Neovim pour effectuer rapidement une inspection pendant le développement.
local info = vim.api.nvim_get_mode()
print(vim.inspect(info))Compromis entre l’API et Vimscript
Préférez vim.api pour les opérations structurées et stables. Utilisez vim.fn ou vim.cmd comme solution de repli lorsqu’aucune fonction native n’existe.
vim.cmd exécute des commandes Ex sous forme de chaînes et convient aux opérations ponctuelles comme vim.cmd('highlight ...'), mais permet moins facilement l’introspection que les appels d’API typés.
vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')Vérification rapide
Testez votre compréhension de l’API Lua de Neovim.
Récapitulatif : l’API Lua
Vous connaissez maintenant les principales interfaces : vim.api pour l’API native typée, vim.fn pour les fonctions Vimscript et vim.cmd pour les commandes Ex.
Les options passent par vim.o/bo/wo, les variables par vim.g/b/w, et des fonctions auxiliaires comme vim.tbl_deep_extend, vim.notify et vim.schedule complètent la boîte à outils de l’auteur d’extension.
Questions Fréquemment Posées
La leçon « L’API Lua de Neovim » est-elle gratuite ?
Oui — le texte complet de « L’API Lua de Neovim » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « L’API Lua de Neovim » ?
Découvrez comment les extensions s’intègrent. Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Lua Academy ?
Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « L’API Lua de Neovim » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?
Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- L’API Lua de Neovim
- Commandes et raccourcis clavier
- Tampons et fenêtres
- Empaqueter une extension