Neovim / vim8的C#LSP自动完成客户端

时间:2019-10-30 14:46:10

标签: c# vim autocomplete language-server-protocol

我尝试了几种方法使其工作,但似乎没有简单的方法。是的,有大量的插件和配置。但截至2019年10月,它们无法正常工作。

  • OmniSharp-Vim客户端需要配置,它仅涵盖C#,并且列出了不再起作用的插件集成(请尝试在ALE中将其选中)。
  • YouCompeleteMe应该可以使用,但是它很大并且看上去很肿。
  • Deoplete没有C#的来源,我发现的配置已过时。
  • Coc.nvim甚至没有列出C#,并且“非官方”配置有问题(例如this)。此外,Coc.nvim似乎与VS Code无关。
  • LanguageClient-neovim我没有找到合理的配置,这似乎是因为C# LSP server需要.sln文件。

因此,这似乎csharpers应该转到VS(或Rider),这是MS提出LSP的时候。您如何使IDE像nvim一样与C#一起使用?

基本上,客户端应该像这样启动服务器并使用LSP。

~/.cache/omnisharp-vim/omnisharp-roslyn/run -s <PATH TO SLN OR DIR>

2 个答案:

答案 0 :(得分:2)

我刚完成omnisharp / ale的全新安装工作。您可能需要完全卸载omnisharp(~\AppData\Local\omnisharp-vim~/.omnisharp),以防万一您有旧版本。

您没有提到您的操作系统;我在Windows 10和Mac OS上均可使用。如果您使用的是Mac OS,请确保先brew install libuv

我的环境

  • Windows 10(v1903)和Mac OS 10.14.6
  • Vim 8.1.2244
  • dotnet核心3.1-我希望3.0也能正常工作

说明

首先,我使用vim-plug作为插件管理器来处理安装。我使用vim-plug的README文件中的bash / powershell片段将其安装在Windows和Mac OS上。

然后,我在vimrc中添加了以下内容(在Windows中为~\_vimrc,在Mac OS中为~/.vimrc):

"vim-plug config
call plug#begin()
Plug 'OmniSharp/omnisharp-vim'
Plug 'dense-analysis/ale'
call plug#end()

" plugin config
let g:OmniSharp_server_stdio = 1

重新启动vim,然后运行:PlugInstall。它将为您克隆omnisharp和ale。

接下来,找到一些C#解决方案,并确保该解决方案在命令行中生成(例如dotnet build应该正确无误地完成)。如果还没有SLN文件(dotnet new sln,然后是dotnet sln add MyProj.csproj),则还需要一个SLN文件

选择一个C#文件并在vim中打开它。您应该看到以下通知:

omnisharp installation

如果安装不会自动启动,则可以使用:OmniSharpInstall启动安装。在终端窗口中进行安装需要一两分钟的下载时间。安装完成后,重新打开vim并执行:cd \path\to\my\solution以确保vim中的工作目录正确。然后使用:e MyProj\Program.cs

服务器将自动启动;不要手动启动它。服务器启动的最初几秒钟,我收到很多语法错误,此后我没有任何错误。

要拉起自动完成功能,请输入类似Console.的内容,然后按 Ctrl-x o

vim with autocomplete

上面的屏幕截图的底部带有vim-airline,它不是omnisharp的一部分,不是必需的。

上面的屏幕截图是Windows,但在Mac OS中也可以正常工作:

mac os

我的完整vimrc is available here和我正在使用is available here测试的源代码。

答案 1 :(得分:0)

到目前为止,这是我使用Deoplete,OmniSharp和ALE(在https://github.com/artkpv/dotfiles/blob/master/.config/nvim/vimrc处的完整配置)的设置:

" Install Deoplete and OmniSharp:
" - OmniSharp/omnisharp-vim    " for LSP support (like start OmniSharp server) and code actions, etc
" - Shougo/deoplete.nvim       " for better autocompletion
" - dense-analysis/ale         " for highlights

function SetCSSettings()

    " Use deoplete.
    call deoplete#enable()

    " Use smartcase.
    call deoplete#custom#option('smart_case', v:true)

    " Use OmniSharp-vim omnifunc 
    call deoplete#custom#source('omni', 'functions', { 'cs':  'OmniSharp#Complete' })

    " Set how Deoplete filters omnifunc output.
    call deoplete#custom#var('omni', 'input_patterns', {
        \ 'cs': '[^. *\t]\.\w*',
        \})

    " ... then goes your mappings for :OmniSharp* functions, see its doc
endfunction

augroup csharp_commands
    autocmd!

    " Use smartcase.
    " call deoplete#custom#option('smart_case', v:true) 
    autocmd FileType cs call SetCSSettings()

augroup END