🌙 Cap 06: Neovim Moderno com Lua e LSP - Exemplos Práticos
Demonstrações práticas de configuração do Neovim 0.10+, Telescope e autocompletion com nvim-cmp.
🗺️ O Ecossistema Language Server Protocol (LSP)
flowchart LR
NEOVIM["Editor Neovim (Cliente LSP Nativo)"]
<--> |"JSON-RPC via stdin/stdout"| SERVER["Servidor LSP (ex: Pyright / gopls / rust-analyzer)"]
SERVER --> AST["Indexação do Projeto e Tipagem"]
SERVER --> DIAG["Diagnósticos de Erro e Warnings em Tempo Real ⚡"]
style NEOVIM fill:#00897b,stroke:#004d40,stroke-width:2px,color:#ffffff
style SERVER fill:#ede7f6,stroke:#512da8,stroke-width:2px
style AST fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style DIAG fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
📄 Exemplo 1: Configuração do Telescope (Fuzzy Finder)
-- lua/plugins/telescope.lua
return {
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
keys = {
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Buscar Arquivos" },
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Buscar Texto no Projeto (Grep)" },
{ "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Listar Buffers Abertos" },
{ "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Buscar Ajuda do Neovim" },
},
config = function()
require("telescope").setup({
defaults = {
prompt_prefix = "🔍 ",
selection_caret = "❯ ",
path_display = { "truncate" },
},
})
end,
}
📄 Exemplo 2: Motor de Autocompletar com nvim-cmp
-- lua/plugins/cmp.lua
return {
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"L3MON4D3/LuaSnip",
},
config = function()
local cmp = require("cmp")
cmp.setup({
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
}, {
{ name = "buffer" },
{ name = "path" },
}),
})
end,
}