我正在努力设置 Neovim 配置以进行开发,特别关注集成
nvim-cmp
用于自动完成和 LuaSnip
用于代码片段支持。但是,我遇到了一个问题,Tab 键确实按预期扩展了片段。
环境:
nvim-cmp
LuaSnip
lsp-zero
当前配置:
我已经在我的
nvim-cmp
配置文件中设置了 LuaSnip
和 lsp.lua
。这是我设置的相关部分:
local lsp = require("lsp-zero")
lsp.preset("recommended")
lsp.ensure_installed({
'gopls',
})
local cmp = require('cmp')
local cmp_select = {behavior = cmp.SelectBehavior.Select}
local cmp_mappings = lsp.defaults.cmp_mappings({
['<C-p>'] = cmp.mapping.select_prev_item(cmp_select),
['<C-n>'] = cmp.mapping.select_next_item(cmp_select),
['<C-y>'] = cmp.mapping.confirm({ select = true }),
['<Return>'] = cmp.mapping.confirm({ select = true }),
["<C-Space>"] = cmp.mapping.complete(),
})
cmp_mappings['<Tab>'] = cmp.mapping.select_next_item(cmp_select)
cmp_mappings['<S-Tab>'] = cmp.mapping.select_prev_item(cmp_select)
lsp.setup_nvim_cmp({
mapping = cmp_mappings
})
lsp.set_preferences({
suggest_lsp_servers = true,
sign_icons = {
error = 'E',
warn = 'W',
hint = 'H',
info = 'I'
}
})
lsp.on_attach(function(client, bufnr)
local opts = {buffer = bufnr, remap = false}
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts)
vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts)
vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts)
vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts)
vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts)
vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts)
vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end, opts)
end)
lsp.setup()
vim.diagnostic.config({
virtual_text = true
})
我还使用
mason
和mason-lspconfig
来管理和自动安装LSP服务器,包括自动安装Lua语言服务器的配置。
问题:
故障排除步骤:
:verbose imap <Tab>
表示Tab键被nvim-cmp
映射。nvim-cmp
和 LuaSnip
文档以了解任何遗漏的配置步骤。问题:
如何在 Neovim 中正确配置 Tab 键以导航
nvim-cmp
完成菜单并使用 LuaSnip
展开片段?我的设置是否存在潜在冲突,或者我的配置中是否缺少关键步骤?