Custom Statusline

    Definição curta: Tutorial para criar uma statusline customizada no Neovim usando Lua e/ou o plugin Lualine.

    Antes de começar

    • Neovim v0.11 ou mais recente instalado — confira com nvim --version
    • Um init.lua que já carrega, ainda que vazio

    O que você vai aprender

    • Explicar Statusline nativa com suas palavras
    • Explicar Lualine setup com suas palavras
    • Explicar Componentes customizados com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    A statusline exibe informações como modo atual, arquivo, linha,coluna, LSP status, git branch e mais. Pode ser customizada via vim.opt.statusline ou com plugins como Lualine.

    Índice de sub-tópicos

    Statusline nativa

    vim.opt.statusline = "%f %m %r %= %l:%c %p%%"
    CódigoConteúdo
    %fNome do arquivo
    %mModificado (modified)
    %rSomente leitura (readonly)
    %=Separador
    %lLinha
    %cColuna
    %p%%Percentual

    Lualine setup

    -- plugins/lualine.lua
    return {
      "nvim-lualine/lualine.nvim",
      dependencies = { "nvim-tree/nvim-web-devicons" },
    }
    -- setup/lualine.lua
    require("lualine").setup({
      options = {
        theme = "dracula",
        section_separators = "",
        component_separators = "",
      },
      sections = {
        lualine_a = { "mode" },
        lualine_b = { "branch", "diff" },
        lualine_c = { "filename" },
        lualine_x = { "encoding", "fileformat", "filetype" },
        lualine_y = { "progress" },
        lualine_z = { "location" },
      },
    })

    Componentes customizados

    -- Componente LSP status
    local function lsp_status()
      local clients = vim.lsp.get_active_clients()
      if #clients > 0 then
        return " LSP: " .. clients[1].name
      end
      return ""
    end
    
    require("lualine").setup({
      sections = {
        lualine_c = {
          { "filename" },
          { lsp_status, color = { fg = "#98c379" } },
        },
      },
    })

    Exemplo completo

    -- setup/lualine.lua
    require("lualine").setup({
      options = {
        theme = "catppuccin",
        icons_enabled = true,
        component_separators = "|",
        section_separators = "",
      },
      sections = {
        lualine_a = { { "mode", fmt = function(str) return str:sub(1,1) end } },
        lualine_b = { "branch" },
        lualine_c = {
          "filename",
          "%=", -- separator
          { "diagnostics", symbols = { error = "E:", warn = "W:" } },
        },
        lualine_x = {
          { "filetype", icon_only = true },
          "encoding",
        },
        lualine_y = { "progress" },
        lualine_z = { "location" },
      },
    })

    Você aprendeu

    • Statusline nativa
    • Lualine setup
    • Componentes customizados
    • Exemplo completo

    Perguntas para reflexão

    1. O que Statusline nativa resolve, e o que se perde sem isso?
    2. O que Lualine setup resolve, e o que se perde sem isso?
    3. O que Componentes customizados 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