You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 18.04下配置Vim/Nvim实现C# .NET Core开发自动补全

解决Ubuntu 18.04下Neovim 0.2.2的C#自动补全配置问题

我之前在类似环境里踩过Omnisharp的坑,给你一套亲测有效的配置步骤,一步步来应该能解决问题:

1. 正确安装Omnisharp-Roslyn服务器

Omnisharp-vim完全依赖这个后端服务,之前配置失败大概率是服务器路径不对或者版本不匹配。针对你的.NET Core 2.0环境,按以下步骤操作:

  • 创建一个存放服务器的目录:mkdir -p ~/.omnisharp/omnisharp-roslyn
  • 下载对应.NET Core 2.0兼容的Omnisharp-Roslyn发布包(Linux x64版本),解压到上面的目录:
    cd ~/.omnisharp/omnisharp-roslyn
    wget https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v1.34.16/omnisharp-linux-x64.tar.gz
    tar -xzf omnisharp-linux-x64.tar.gz
    
    (注:v1.34.16是和.NET Core 2.0兼容的稳定版本,别选太新的,避免版本冲突)

2. 配置Omnisharp-vim插件

打开你的Neovim配置文件~/.config/nvim/init.vim,添加以下配置:

" 指定Omnisharp-Roslyn服务器路径
let g:omnisharp_server_path = expand('~/.omnisharp/omnisharp-roslyn/OmniSharp.dll')
" 启用Roslyn后端
let g:omnisharp_use_roslyn = 1
" 自动启动服务器
let g:omnisharp_auto_start = 1

" 补全相关基础配置
set completeopt=menuone,noinsert,noselect
set shortmess+=c

3. 配置补全引擎(Deoplete为例)

Neovim 0.2.2推荐用Deoplete作为补全引擎,它和Omnisharp-vim兼容性很好:

  • 首先用插件管理器(比如Vundle或Plug)安装Deoplete和Omnisharp-vim:
    如果用Vundle,在init.vim里加:
    Plugin 'Shougo/deoplete.nvim'
    Plugin 'OmniSharp/omnisharp-vim'
    
    然后运行:PluginInstall完成安装。
  • 接着添加Deoplete和Omnisharp的联动配置:
    let g:deoplete#enable_at_startup = 1
    let g:deoplete#sources#omnisharp#enabled = 1
    " 自动触发补全的延迟(可根据需求调整)
    let g:deoplete#auto_complete_delay = 200
    

4. 实用键位映射(可选但推荐)

在init.vim里加一些常用的C#开发快捷键,提升效率:

" 跳转到定义
nnoremap <silent> gd :OmniSharpGotoDefinition<CR>
" 显示代码文档(类似VS的F1功能)
nnoremap <silent> K :OmniSharpDocumentation<CR>
" 重命名符号
nnoremap <silent> <F2> :OmniSharpRename<CR>
" 格式化代码
nnoremap <silent> <C-F> :OmniSharpCodeFormat<CR>

5. 验证配置

  • 打开一个已有的.NET Core项目中的.cs文件,输入:OmniSharpStatus命令,如果显示Server running说明后端服务启动成功。
  • 输入代码(比如Console.),应该会自动弹出补全列表,选择后按回车即可完成补全。

如果还是有问题,检查以下几点:

  • 确认dotnet命令能正常运行(确保你的.NET Core 2.0环境无异常)
  • 检查Omnisharp-Roslyn的路径是否正确,没有拼写错误
  • 查看Neovim的日志:messages,排查是否有具体报错信息

内容的提问来源于stack exchange,提问作者Eskinder

火山引擎 最新活动