Neovim which-key警告求助:旧版映射规范及按键重叠问题
解决Which-key的两类警告问题
1. 旧版映射规范警告
你的LSP相关映射使用了Which-key的旧版格式,虽不影响功能,但会触发警告。按照提示的新版规范修改即可:
原来的旧格式:
{ ["<leader>rn"] = { "<cmd>lua vim.lsp.buf.rename()<CR>", "Rename Symbol" }, K = { "<cmd>lua vim.lsp.buf.hover()<CR>", "Hover Documentation" }, g = { d = { "<cmd>lua vim.lsp.buf.definition()<CR>", "Go to Definition" }, i = { "<cmd>lua vim.lsp.buf.implementation()<CR>", "Go to Implementation" }, name = "Go" }, gk = { "<cmd>lua vim.lsp.buf.signature_help()<CR>", "Signature Help" }, noremap = true, silent = true }
修改为新版数组式结构:
{ { "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", desc = "Rename Symbol", remap = false }, { "K", "<cmd>lua vim.lsp.buf.hover()<CR>", desc = "Hover Documentation", remap = false }, { "g", group = "Go", remap = false }, { "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", desc = "Go to Definition", remap = false }, { "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", desc = "Go to Implementation", remap = false }, { "gk", "<cmd>lua vim.lsp.buf.signature_help()<CR>", desc = "Signature Help", remap = false }, }
关键变化点:
- 改用数组包裹每个单独的映射项
- 用
desc字段替代原来的第二个字符串元素作为描述 - 用
group字段替代name定义分组 - 用
remap = false替代全局的noremap = true(新版中remap=false等价于noremap=true) - 移除全局
silent = true,若需要静音可在单个映射项中添加(LSP命令通常默认已静音)
2. 按键映射重叠警告
这些警告来自注释插件(如Comment.nvim)和Surround插件(如nvim-surround)的默认映射:
<gc>/<gcc>:<gc>等待选择运动范围注释,<gcc>直接注释当前行<ys>/<yss>、<yS>/<ySS>:<ys>给运动范围加包围,<yss>给当前行加包围;<yS>在范围外添加,<ySS>在当前行外添加
这类重叠是插件设计的正常行为,不影响功能,Which-key仅作提示。若一定要消除警告,可修改其中一组插件的映射前缀:
- 比如修改Comment.nvim配置,将
gc改为gC - 或修改nvim-surround配置,将
ys改为yS(反之亦可)
但通常无需修改,短前缀代表"等待输入运动",重复前缀代表"作用于当前行",是约定俗成的交互逻辑,用户已形成使用习惯。
内容的提问来源于stack exchange,提问作者Tahseen
相关产品推荐
相关产品推荐

