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,
}