A API Lua do Neovim
Entenda como os plugins se conectam.
A API Lua do Neovim é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Por que usar Lua no Neovim
O Neovim incorpora um ambiente de execução LuaJIT, tornando Lua a linguagem nativa de scripts ao lado do Vimscript. Autores de plugins preferem Lua por sua velocidade, suas estruturas de dados reais e seu sistema de módulos limpo.
A tabela global vim é a porta de entrada para tudo: o estado do editor, a API, as opções e as funções auxiliares da biblioteca padrão. Dominá-la é a base do desenvolvimento moderno de plugins.
print(vim.inspect(vim.version()))A camada vim.api
vim.api expõe a API remota de baixo nível: todas as funções com o prefixo nvim_. São as mesmas chamadas que clientes externos usam por RPC, mas, no mesmo processo, elas são executadas instantaneamente.
Funções como nvim_get_current_buf, nvim_buf_set_lines e nvim_command oferecem controle preciso. Elas são estáveis, bem documentadas e formam a base de plugins robustos.
local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)vim.fn — Chamando funções do Vimscript
vim.fn faz a ponte com as funções integradas do Vimscript. Tudo o que pode ser chamado no Vimscript, como expand() ou fnamemodify(), pode ser acessado como vim.fn.expand(...).
Isso é indispensável quando ainda não existe uma API nativa. Os argumentos e os valores retornados são convertidos automaticamente entre os tipos de Lua e do Vimscript.
local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)Opções: vim.o, vim.bo, vim.wo
As opções são definidas por meio de metatabelas. vim.o tem como alvo as opções globais, vim.bo as específicas do buffer e vim.wo as específicas da janela.
A atribuição é tão simples quanto escrever em um campo. Isso substitui as chamadas extensas de nvim_set_option e torna o código de configuração mais natural de ler.
vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = falsevim.g e variáveis globais
vim.g lê e grava variáveis globais do Vim. Os plugins costumam expor aqui opções de configuração, como vim.g.myplugin_enabled.
Ler uma variável não definida retorna nil, portanto use valores padrão como proteção. Também existem variantes com escopo de buffer e de janela, disponíveis como vim.b e vim.w.
vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)Notificações e eco
Use vim.notify para exibir mensagens ao usuário. Ela aceita uma cadeia de caracteres com a mensagem e um nível de registro opcional de vim.log.levels.
Gerenciadores de plugins como noice ou notify podem interceptar essas mensagens para oferecer uma interface mais agradável. Prefira vim.notify a print bruto para saídas exibidas ao usuário.
vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)Agendamento com vim.schedule
Algumas chamadas da API são proibidas em contextos de eventos rápidos, como dentro de certas funções de retorno. vim.schedule adia uma função para o loop principal, onde toda a API pode ser usada com segurança.
Isso evita os temidos erros "E5560" ao modificar buffers em contextos assíncronos ou de comandos automáticos.
vim.schedule(function()
vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)Comandos automáticos em Lua
nvim_create_autocmd registra manipuladores de eventos. Agrupe-os com nvim_create_augroup e defina clear = true para evitar duplicatas ao recarregar.
A função de retorno recebe uma tabela de eventos com campos como buf e match, fornecendo o contexto preciso para o seu manipulador.
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 e funções auxiliares de texto
O Neovim inclui uma biblioteca padrão abrangente. vim.tbl_extend, vim.tbl_keys e vim.split abrangem operações comuns com tabelas e cadeias de caracteres.
vim.tbl_deep_extend('force', defaults, opts) é a forma padrão de mesclar a configuração do usuário sobre os padrões do plugin.
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 para depuração
vim.inspect serializa qualquer valor Lua em uma cadeia legível, incluindo tabelas aninhadas. É a maneira mais rápida de entender os formatos dos valores retornados pela API.
Combine-o com :lua print(vim.inspect(...)) ou :lua= expr nas versões recentes do Neovim para fazer uma inspeção rápida durante o desenvolvimento.
local info = vim.api.nvim_get_mode()
print(vim.inspect(info))Compromissos entre a API e o Vimscript
Dê preferência a vim.api para operações estruturadas e estáveis. Use vim.fn ou vim.cmd como alternativa quando não existir uma função nativa.
vim.cmd executa comandos ex como cadeias de caracteres e é útil para ações pontuais, como vim.cmd('highlight ...'), mas permite menos inspeção do que as chamadas de API tipadas.
vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')Verificação rápida
Teste sua compreensão da API Lua do Neovim.
Recapitulação: a API Lua
Agora você conhece as principais interfaces: vim.api para a API nativa tipada, vim.fn para funções do Vimscript e vim.cmd para comandos ex.
As opções passam por vim.o/bo/wo, as variáveis por vim.g/b/w, e funções auxiliares como vim.tbl_deep_extend, vim.notify e vim.schedule completam o conjunto de ferramentas de um autor de plugins.
Perguntas Frequentes
A aula “A API Lua do Neovim” é grátis?
Sim — o texto completo de “A API Lua do Neovim” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “A API Lua do Neovim”?
Entenda como os plugins se conectam. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “A API Lua do Neovim”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A API Lua do Neovim
- Comandos e mapas de teclas
- Buffers e janelas
- Empacotando um plugin