neovim/vim8 的 C# LSP 自动补全客户端

标签 c# vim autocomplete language-server-protocol coc.nvim

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

  • OmniSharp-Vim客户端需要配置,它仅涵盖 C#,它列出了不再工作的插件集成(尝试选择它用于 ALE 中的 linting)。
  • 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>

最佳答案

我刚刚让 omnisharp/ale 通过全新安装成功运行。您可能想要完全卸载 omnisharp(~\AppData\Local\omnisharp-vim~/.omnisharp)以防万一您有旧版本。

你没有提到你的操作系统;我在 Windows 10 和 Mac OS 中都有这个工作。如果您使用的是 Mac 操作系统,请确保先brew install libuv

我的环境

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

说明

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

然后我将以下内容添加到我的 vimrc(~\_vimrc 在 Windows 上,~/.vimrc 在 Mac OS 上):

"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)

选择一个 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 测试的源代码.

关于neovim/vim8 的 C# LSP 自动补全客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58627964/

相关文章:

c# - Visual Studio 自动格式化没有正确格式化我的 Razor 代码

c# - 在 C# 中将 DateTime 日期和字符串时间组合成单个 DateTime

c# - 自动滚动并导航到 asp.net div

c# - 在 Windows 中创建 Applescript?

python - 从 WSDL 文件显式生成自动完成代码?

vim - 是否可以将 <C-;> 映射到 : in vim?

vim - 如何检查 NERDTree 是否在 vimscript 中打开?

javascript - 在 VIM 的脚本标签内正确缩进 javascript

autocomplete - IntelliJ 中的 Intellisense 不再工作

javascript - 是否可能/如何像 Google 插件一样设置 jQuery 自动完成的延迟?