You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:30:37