Buffers, janelas e abas

    Definição curta: Buffer é o conteúdo de um arquivo carregado na memória; janela é uma vista sobre um buffer; aba é um arranjo de janelas. Os três são independentes.

    Antes de começar

    • Saber sair do Neovim (:q) e navegar em modo normal

    O que você vai aprender

    • Explicar Buffers com suas palavras
    • Explicar Janelas com suas palavras
    • Explicar Abas com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    Este é o modelo que mais confunde quem vem de outros editores, porque nomes iguais significam coisas diferentes. No VS Code, uma “aba” é um arquivo aberto. No Neovim, não.

    ConceitoO que éComando de listagem
    Buffero conteúdo de um arquivo na memória:ls ou :buffers
    Janela (window)uma vista sobre um buffer:windows
    Aba (tab page)um arranjo de janelas:tabs

    A relação não é um para um. O mesmo buffer pode aparecer em três janelas simultâneas — útil para ver duas partes do mesmo arquivo. Uma janela mostra um buffer por vez. Uma aba contém um ou mais layouts de janela.

    Buffers

    Um buffer existe a partir do momento em que você abre um arquivo, e continua existindo depois que você “sai” dele.

    :e arquivo.lua      " abre em buffer novo
    :ls                 " lista os buffers
    :b 3                " vai para o buffer 3
    :b parcial<Tab>     " completa por nome parcial
    :bn / :bp           " próximo / anterior
    :bd                 " descarrega o buffer (buffer delete)

    Os indicadores de :ls importam:

      1 #h   "init.lua"              linha 42
      2 %a + "lua/plugins.lua"       linha 7
      3  h   "README.md"             linha 1
    • % é o buffer da janela atual, # é o alternativo (alvo do <C-^>)
    • a é ativo (visível em alguma janela), h é oculto
    • + significa modificado e não salvo

    O <C-^> alterna entre o buffer atual e o alternativo. É provavelmente o atalho de navegação com melhor razão entre economia e esforço de aprendizado.

    Janelas

    :sp   / <C-w>s      " divide na horizontal
    :vs   / <C-w>v      " divide na vertical
    <C-w>h j k l        " move para a janela à esquerda/baixo/cima/direita
    <C-w>H J K L        " reposiciona a janela inteira
    <C-w>c              " fecha a janela (o buffer continua vivo)
    <C-w>o              " fecha todas as outras
    <C-w>=              " iguala os tamanhos
    <C-w>_ / <C-w>|     " maximiza altura / largura
    10<C-w>+            " aumenta 10 linhas

    Fechar uma janela não descarrega o buffer. Esse é o mal-entendido mais comum: o arquivo continua aberto, apenas não está visível.

    Abas

    Uma aba do Neovim é um espaço de trabalho com seu próprio layout de janelas — mais próxima de um “workspace” que de uma aba de navegador.

    :tabnew arquivo     " nova aba
    gt / gT             " próxima / anterior
    2gt                 " vai para a aba 2
    :tabclose           " fecha a aba
    :tabonly            " fecha as outras

    O uso idiomático não é “uma aba por arquivo” — é “uma aba por contexto de trabalho”: uma para o código, outra para os testes, outra para a documentação.

    Escondido versus descarregado

    A opção hidden (ligada por padrão no Neovim) permite sair de um buffer modificado sem salvar. Com ela desligada, o Neovim recusa a troca até você salvar ou descartar.

    :set hidden?        " consulta o estado
    :bd!                " descarrega descartando modificações
    :w | bd             " salva e descarrega

    Fluxo recomendado

    Para a maioria dos usos, buffers bastam e janelas resolvem a comparação lado a lado. Abas são para separar contextos grandes.

    Uma configuração mínima que torna a navegação por buffers confortável:

    vim.keymap.set('n', '<leader>bn', ':bnext<CR>', { desc = 'Próximo buffer' })
    vim.keymap.set('n', '<leader>bp', ':bprev<CR>', { desc = 'Buffer anterior' })
    vim.keymap.set('n', '<leader>bd', ':bdelete<CR>', { desc = 'Fecha buffer' })
    vim.keymap.set('n', '<leader><leader>', '<C-^>', { desc = 'Alterna buffer' })

    Com Telescope instalado, :Telescope buffers substitui boa parte disso com busca difusa.

    Erros comuns

    • Usar :q esperando fechar o arquivo:q fecha a janela; se era a última, encerra o Neovim
    • :bd achando que fecha só a janela — é o contrário
    • Uma aba por arquivo — funciona, mas desperdiça o modelo e fica lento acima de dez abas
    • Achar que buffer oculto consome recurso relevante — cem buffers de texto são irrelevantes em memória

    Você aprendeu

    • Buffers
    • Janelas
    • Abas
    • Escondido versus descarregado
    • Fluxo recomendado

    Perguntas para reflexão

    1. O que Buffers resolve, e o que se perde sem isso?
    2. O que Janelas resolve, e o que se perde sem isso?
    3. O que Abas resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências

    • :help windows — a documentação canônica dos três conceitos
    • :help buffers
    • :help tab-page