Neovim跳转C#外部库定义时出现Cursor position outside buffer错误
解决AstroNvim中C#外部库跳转定义的光标位置错误问题
问题概述
在AstroNvim中配置omnisharp-extended-lsp.nvim以实现C#外部库代码的跳转定义时,按下gd会触发光标位置错误,报错信息指向vim.lsp.util和telescope的处理逻辑,无法正常显示反编译的外部库代码。
解决方案
1. 修正OmniSharp LSP配置
在OmniSharp LSP配置中,禁用默认的定义提供能力,并替换为omnisharp-extended的处理逻辑。修改~/.config/nvim/init.lua或对应的LSP配置文件:
require("lspconfig").omnisharp.setup({ on_attach = function(client, bufnr) -- 禁用默认定义提供,避免与插件冲突 client.server_capabilities.definitionProvider = false -- 初始化omnisharp-extended require("omnisharp_extended").setup() -- 重新映射gd到插件的定义跳转函数 vim.keymap.set("n", "gd", require("omnisharp_extended").lsp_definitions, { buffer = bufnr, silent = true, desc = "Go to definition (supports external library decompilation)" }) -- 保留AstroNvim默认LSP映射逻辑 require("astronvim.utils.lsp").on_attach(client, bufnr) end, -- 其他OmniSharp配置项(如cmd、root_dir等)保持原有设置 })
2. 调整插件加载依赖
确保omnisharp-extended-lsp.nvim与LSP配置正确联动,修改~/.config/nvim/lua/plugins/omni-extended.lua:
return { "Hoffs/omnisharp-extended-lsp.nvim", dependencies = { "neovim/nvim-lspconfig" }, event = "BufReadPre *.cs", }
3. 验证配置效果
重启Neovim后,打开测试项目的EchoBot.cs,定位到ActivityHandler并按下gd,应能正常打开反编译的外部库代码缓冲区,无光标位置错误提示。
错误原因
AstroNvim默认使用telescope.nvim处理LSP定义跳转,但telescope的LSP处理逻辑无法正确解析omnisharp-extended返回的临时反编译缓冲区位置,导致光标设置时超出缓冲区范围,触发错误。通过直接使用插件自带的跳转函数,可绕过telescope的处理逻辑,直接正确定位到反编译代码。
内容的提问来源于stack exchange,提问作者Ram Fattah
相关产品推荐
相关产品推荐

