Motor de Completion
Definição curta: Tutorial para configurar o nvim-cmp como motor de autocompletion no Neovim, integrando LSP, buffers, snippets e mais.
Antes de começar
- Neovim v0.11 ou mais recente instalado — confira com
nvim --version - Um
init.luaque já carrega, ainda que vazio
O que você vai aprender
- Explicar Plugins necessários com suas palavras
- Explicar Configuração básica com suas palavras
- Explicar Fontes de completion com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
O que é
O nvim-cmp é o motor de completion mais popular para Neovim. Fornece autocompletion inteligente integrando múltiplas fontes.
Índice de sub-tópicos
Plugins necessários
-- plugins/cmp.lua
return {
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp", -- LSP source
"hrsh7th/cmp-buffer", -- Buffer source
"hrsh7th/cmp-path", -- Path source
"hrsh7th/cmp-cmdline", -- Cmdline source
"L3MON4D3/LuaSnip", -- Snippets
"saadparwaiz1/cmp_luasnip", -- Snippets source
},
}Configuração básica
-- setup/cmp.lua
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
}),
})Fontes de completion
| Fonte | Descrição |
|---|---|
nvim_lsp | Completions do LSP |
luasnip | Snippets |
buffer | Palavras do buffer |
path | Caminhos de arquivo |
cmdline | Comandos |
Snippets
-- Snippet Lua
local luasnip = require("luasnip")
luasnip.add_snippets("lua", {
luasnip.snippet("req", {
luasnip.text_node("local "),
luasnip.function_node(1, 1, { "require" }),
luasnip.text_node('(""),
luasnip.insert_node(1),
luasnip.text_node('")'),
}),
})Keymaps
cmp.setup({
mapping = cmp.mapping.preset.insert({
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end, { "i", "s" }),
}),
})Você aprendeu
- Plugins necessários
- Configuração básica
- Fontes de completion
- Snippets
- Keymaps
Perguntas para reflexão
- O que Plugins necessários resolve, e o que se perde sem isso?
- O que Configuração básica resolve, e o que se perde sem isso?
- O que Fontes de completion resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- Configuração LSP — LSP integration
- init.lua básico — Setup inicial