0Pricing
Lua Academy · Aula

Buffers e janelas

Manipule o editor.

Buffers e janelas é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 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.

Buffers, janelas e abas

O Neovim separa o conteúdo da exibição. Um buffer mantém texto na memória; uma janela é uma área de visualização de um buffer; uma página de abas é um arranjo de janelas.

Um buffer pode aparecer em várias janelas. Os plugins manipulam esses identificadores, que são inteiros, por meio das famílias de API nvim_buf_* e nvim_win_*.

local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)

Lendo linhas do buffer

nvim_buf_get_lines(buf, start, end_, strict) retorna linhas como uma lista. Os índices começam em zero e não incluem o limite final; passe -1 como limite final para chegar à última linha.

Definir strict_indexing como false tolera índices fora do intervalo em vez de gerar um erro.

local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)

Gravando linhas do buffer

nvim_buf_set_lines substitui um intervalo por um novo texto. Para adicionar texto ao final, defina o início e o fim como -1. Para sobrescrever tudo, use 0, -1.

A substituição é uma lista Lua de cadeias de caracteres, uma por linha, sem caracteres de nova linha ao final.

vim.api.nvim_buf_set_lines(0, -1, -1, false, {
  '-- appended line',
})

Buffers temporários

Crie um buffer não listado e descartável com nvim_create_buf(listed, scratch). Passar false, true cria um buffer temporário ideal para a interface do plugin.

Defina bufhidden = 'wipe' para que ele desapareça quando a janela for fechada, evitando buffers residuais.

local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })

Opções específicas do buffer

Use vim.bo[buf] para definir opções específicas do buffer em um identificador determinado. Configurações comuns de plugins incluem modifiable = false e buftype = 'nofile'.

Tornar um buffer de exibição não modificável impede que os usuários editem acidentalmente o conteúdo gerado.

vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'

Abrindo janelas flutuantes

nvim_open_win(buf, enter, config) coloca um buffer em uma janela flutuante. A configuração define relative, row, col, width, height e border.

As janelas flutuantes são a base de interfaces modernas, como documentação contextual, seletores e notificações.

local win = vim.api.nvim_open_win(buf, true, {
  relative = 'editor', row = 5, col = 10,
  width = 40, height = 10, border = 'rounded',
})

Configuração de janelas

Ajuste uma janela flutuante aberta com nvim_win_set_config, o que é útil para redimensioná-la em VimResized. Leia o layout atual com nvim_win_get_config.

Defina opções específicas da janela por meio de vim.wo[win], por exemplo, ocultando a linha do cursor ou desativando colunas de números nos painéis da interface.

vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })

Cursor e posição

Mova o cursor com nvim_win_set_cursor(win, {row, col}). Observe que a linha começa em um, mas a coluna começa em zero, uma fonte frequente de erros de diferença de um.

Leia a posição de volta com nvim_win_get_cursor para memorizar e restaurar a posição do usuário antes e depois de uma operação.

local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })

Validade e limpeza

Os identificadores podem ficar obsoletos. Verifique-os com nvim_buf_is_valid e nvim_win_is_valid antes de agir sobre identificadores armazenados.

Feche as janelas com nvim_win_close(win, force) e exclua buffers por meio de nvim_buf_delete(buf, { force = true }). Sempre valide primeiro para evitar erros.

if vim.api.nvim_win_is_valid(win) then
  vim.api.nvim_win_close(win, true)
end

Marcas estendidas e espaços de nomes

As marcas estendidas associam metadados ao texto e acompanham seu movimento conforme as edições acontecem. Crie um espaço de nomes com nvim_create_namespace e, em seguida, associe texto virtual ou destaques.

nvim_buf_set_extmark oferece suporte a virt_text, colunas de sinais e destaques em linha — o mecanismo por trás das dicas embutidas e dos plug-ins de identificação de autoria no git.

local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
  virt_text = { { ' hint', 'Comment' } },
})

Listagem e iteração

nvim_list_bufs e nvim_list_wins retornam todos os identificadores atuais. Filtre-os com nvim_buf_is_loaded ou verificando opções.

Iterar permite que um plug-in atue em toda a sessão, como fechar todas as janelas flutuantes ou atualizar cada área de texto de um determinado tipo de arquivo.

for _, b in ipairs(vim.api.nvim_list_bufs()) do
  if vim.api.nvim_buf_is_loaded(b) then print(b) end
end

Verificação rápida

Verifique o que você aprendeu sobre áreas de texto e janelas.

Recapitulação: áreas de texto e janelas

As áreas de texto armazenam texto, as janelas o exibem, e os identificadores são números inteiros que você deve validar antes de usar. Você pode ler e gravar linhas, criar áreas de texto temporárias e definir opções locais à área de texto.

Janelas flutuantes por meio de nvim_open_win, controle do cursor, marcas estendidas e APIs de listagem oferecem tudo de que você precisa para criar interfaces de plug-in ricas e com estado.

Perguntas Frequentes

A aula “Buffers e janelas” é grátis?

Sim — o texto completo de “Buffers e janelas” é 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 “Buffers e janelas”?

Manipule o editor. 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 3 de 4.

Quanto tempo leva a aula “Buffers e janelas”?

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