配置Neovim作为C# 10编辑器时LSP无法识别语言特性问题求助
解决Neovim中C# LSP无法识别C#9+语法的问题
一、更新OmniSharp-Roslyn版本
你当前使用的OmniSharp版本可能过旧,不支持C#9+语法:
- 在Neovim中执行
:OmniSharpInstall,该命令会自动拉取最新版的OmniSharp-Roslyn,替换缓存目录中的旧版本。 - 确认配置中的
cmd路径指向的是更新后的运行脚本,确保路径~/.cache/omnisharp-vim/omnisharp-roslyn/run对应最新安装的版本。
二、修正OmniSharp配置参数
配置中的两处细节可能导致语法识别异常:
- 补全PID变量:原配置中的
pid未定义,需替换为Neovim的进程ID,使用vim.fn.getpid()。 - 启用EditorConfig支持:添加
--enable-editorconfig-support参数,确保OmniSharp优先读取项目的语法版本配置。
修改后的OmniSharp配置:
require'lspconfig'.omnisharp.setup { capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()), on_attach = function(_, bufnr) vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') end, cmd = { "~/.cache/omnisharp-vim/omnisharp-roslyn/run", "--languageserver", "--hostPID", tostring(vim.fn.getpid()), "--enable-editorconfig-support" }, }
三、更新csharp-ls并验证SDK配置
csharp-ls依赖.NET SDK版本来识别语法:
- 通过
:LspInstallInfo csharp_ls查看当前版本,若版本过旧,执行:LspInstall csharp_ls重新安装最新版。 - 检查项目根目录的
global.json,确保指定的SDK版本支持C#9+(如.NET 5及以上):{ "sdk": { "version": "6.0.400" } }
四、确认项目配置的有效性
即使已指定LangVersion,仍需验证项目框架匹配:
- 确保csproj中的
TargetFramework与语法版本对应,比如C#10需要.NET 6及以上:
若<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <LangVersion>10.0</LangVersion> </PropertyGroup>TargetFramework为.NET Core 3.1或更早,即使指定高版本LangVersion也无法生效。
五、排查插件冲突
你同时安装了omnisharp-vim和nvim-lspconfig的OmniSharp配置,两者可能冲突:
- 注释掉插件列表中的
Plug 'OmniSharp/omnisharp-vim',执行:PlugClean清理已移除的插件,再执行:PlugInstall更新插件列表,仅保留nvim-lspconfig的OmniSharp配置。
六、清理LSP缓存
缓存的旧配置可能干扰语法识别:
- 删除OmniSharp缓存目录:
rm -rf ~/.cache/omnisharp-vim,之后重新安装最新版。 - 删除csharp-ls安装目录(通常在
~/.local/share/nvim/lsp_servers/csharp_ls),再通过:LspInstall csharp_ls重新安装。
内容的提问来源于stack exchange,提问作者JorgeFD
相关产品推荐
相关产品推荐

