0Pricing
Lua Academy · Aula

Comandos e mapas de teclas

Adicione ações voltadas ao usuário.

Comandos e mapas de teclas é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 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.

Visão geral dos comandos do usuário

Comandos do usuário são comandos precedidos por dois-pontos que o seu plugin expõe, como :Format ou :Telescope. Eles devem começar com uma letra maiúscula.

nvim_create_user_command os define em Lua, recebendo um nome, uma função de retorno ou uma cadeia de caracteres e uma tabela de opções. Isso substitui o :command do Vimscript.

vim.api.nvim_create_user_command('Hello', function()
  print('Hello from my plugin')
end, {})

Argumentos de comandos

Defina nargs para aceitar argumentos: '0', '1', '*', '?' ou '+'. A função de retorno recebe uma tabela opts com args, fargs e bang.

fargs é a lista de argumentos já separada pelos espaços em branco, que normalmente é o que você deseja.

vim.api.nvim_create_user_command('Greet', function(opts)
  print('Hi ' .. opts.args)
end, { nargs = 1 })

Comandos com intervalo e exclamação

Passe range = true para aceitar intervalos de linhas; a função de retorno então lê opts.line1 e opts.line2. Adicione bang = true para permitir :Cmd!, detectado por meio de opts.bang.

Esses sinalizadores permitem que um comando se comporte de maneiras diferentes para seleções visuais ou variantes forçadas.

vim.api.nvim_create_user_command('Sum', function(o)
  print(o.line1 .. ' to ' .. o.line2)
end, { range = true })

Conclusão de comandos

Forneça conclusão por tabulação com a opção complete. Use opções integradas como 'file' ou 'buffer', ou uma função Lua personalizada.

Uma função personalizada de conclusão recebe o argumento parcial e a linha de comando e retorna uma lista de cadeias de caracteres candidatas.

vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
  nargs = 1,
  complete = function() return { 'red', 'green', 'blue' } end,
})

Comandos específicos do buffer

Para limitar um comando a um único buffer, use nvim_buf_create_user_command com o identificador do buffer. Isso é comum em plugins de tipo de arquivo.

Por exemplo, um plugin de Markdown pode definir :Preview somente dentro de buffers Markdown, mantendo limpo o espaço de nomes global.

vim.api.nvim_buf_create_user_command(0, 'Preview', function()
  print('previewing this buffer')
end, {})

Apresentando vim.keymap.set

vim.keymap.set é a API moderna de mapeamento. Ela recebe um modo, as teclas do lado esquerdo, uma cadeia de caracteres ou função Lua do lado direito e uma tabela de opções.

Ao contrário do antigo nvim_set_keymap, ela aceita diretamente uma função de retorno Lua no lado direito, sem necessidade de envolver o código em <cmd>lua.

vim.keymap.set('n', '<leader>w', function()
  vim.cmd('write')
end, { desc = 'Save file' })

Modos e vários mapeamentos

O argumento de modo pode ser uma única cadeia de caracteres, como 'n', ou uma tabela, como { 'n', 'v' }, para mapear vários modos de uma só vez.

Modos comuns: n normal, i inserção, v visual, x somente visual, t terminal. Uma cadeia vazia '' significa normal, visual e pendente de operador.

vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })

Opções de mapeamento

A tabela opts controla o comportamento. silent = true suprime o eco do comando, noremap é true por padrão para maior segurança e buffer = 0 limita o mapeamento ao buffer atual.

Sempre adicione um desc para que a saída de which-key e de :map continue legível.

vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
  buffer = 0, silent = true, desc = 'Go to definition',
})

Mapeamentos de expressões

Com expr = true, a função do lado direito retorna as teclas a serem inseridas. Isso permite mapeamentos inteligentes, como fazer <Tab> se comportar de maneira diferente quando um menu de conclusão está visível.

Retorne uma cadeia vazia para não fazer nada ou as teclas literais a serem inseridas.

vim.keymap.set('i', '<Tab>', function()
  return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })

Excluindo mapeamentos

Remova um mapeamento com vim.keymap.del, passando o mesmo modo e as mesmas teclas, além de um campo buffer se ele for específico do buffer.

Isso é útil em rotinas de limpeza ou quando um plugin desativa uma funcionalidade e precisa restaurar os mapeamentos originais do usuário.

vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })

Comandos e mapeamentos em conjunto

Um padrão organizado é definir a lógica uma vez, expô-la como um comando do usuário e associar a ele uma tecla que o chame. Assim, você mantém uma única fonte de verdade.

Mapear para <cmd>Hello<cr> evita sair do modo visual e é mais previsível do que :Hello<cr>.

vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })

Verificação rápida

Verifique sua compreensão dos comandos e dos mapeamentos de teclas.

Recapitulação: comandos e mapeamentos

Agora você pode criar comandos com nvim_create_user_command, controlá-los por meio de nargs, range, bang e complete e limitar o escopo deles por buffer.

Para mapeamentos, vim.keymap.set aceita funções de retorno Lua, vários modos e opções como desc, silent, buffer e expr, enquanto vim.keymap.del permite fazer a limpeza.

Perguntas Frequentes

A aula “Comandos e mapas de teclas” é grátis?

Sim — o texto completo de “Comandos e mapas de teclas” é 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 “Comandos e mapas de teclas”?

Adicione ações voltadas ao usuário. 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 2 de 4.

Quanto tempo leva a aula “Comandos e mapas de teclas”?

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

  1. A API Lua do Neovim
  2. Comandos e mapas de teclas
  3. Buffers e janelas
  4. Empacotando um plugin
← Voltar para Lua Academy