← posts
·3 min de leitura

meu setup neovim em 2026

neovimtoolingdotfiles

Uso Neovim como editor principal faz uns dois anos. A cada poucos meses eu reviso a config, tiro o que não uso, e de vez em quando adiciono algo novo. Aqui tá o estado atual.

O básico

Minha config fica em ~/.config/nvim/ e eu gerencio plugins com lazy.nvim. A config toda dá umas ~400 linhas em alguns arquivos, nada demais.

-- bootstrap do lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git", "clone", "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

Lista de plugins

O que eu tenho instalado agora:

Plugin Pra que serve
telescope.nvim fuzzy finder pra arquivos, grep, buffers
treesitter syntax highlighting, text objects
lspconfig setup LSP pra TS, Go, Rust
oil.nvim file explorer que funciona como buffer
mini.surround text objects de surround
gitsigns diff do git no gutter

Eu costumava ter muito mais coisa: nvim-tree, bufferline, lualine com config elaborada. Tirei tudo. Quanto menos UI, melhor.

Atalhos que importam

A maioria dos meus atalhos usa leader. Uso espaço como leader.

vim.g.mapleader = " "

-- arquivos
vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>")
vim.keymap.set("n", "<leader>fg", "<cmd>Telescope live_grep<cr>")
vim.keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>")

-- lsp
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
vim.keymap.set("n", "K", vim.lsp.buf.hover)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename)
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action)

O negócio dos atalhos é que você só deveria mapear coisa que realmente usa. Vejo configs com 100+ mapeamentos e garanto que metade é esquecida em uma semana.

Screenshot

Assim que fica na prática, editando um arquivo TypeScript com o colorscheme gruvbox:

screenshot do neovim: editando um arquivo TypeScript com gruvbox dark, popup do telescope visível

Config do LSP

Pra TypeScript uso ts_ls, pra Go gopls, pra Rust rust-analyzer. A config é mínima:

local lspconfig = require("lspconfig")
local servers = { "ts_ls", "gopls", "rust_analyzer" }

for _, server in ipairs(servers) do
  lspconfig[server].setup({
    capabilities = require("cmp_nvim_lsp").default_capabilities(),
  })
end

Sem wrappers elaborados. Se o LSP suporta, o Neovim cuida. Format on save é só um autocommand:

vim.api.nvim_create_autocmd("BufWritePre", {
  callback = function()
    vim.lsp.buf.format({ async = false })
  end,
})

O que eu mudaria

Sinceramente, não muito. A config tá estável. A única coisa que fico indo e voltando é se deveria usar conform.nvim pra formatação ao invés do formatter built-in do LSP. Por enquanto o built-in dá conta.

Se quiser ver a config completa, tá no meu repo de dotfiles.