适用于 neovim / vim8 的 C# LSP 自动完成客户端

2024-04-23

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

  • OmniSharp-Vim https://github.com/OmniSharp/omnisharp-vim客户端需要配置,它仅涵盖 C#,并且列出了不再起作用的插件集成(尝试选择它用于 ALE 中的 linting)。
  • 你使我完整 https://github.com/ycm-core/YouCompleteMe应该可以,但它很大而且看起来很臃肿。
  • Deoplete https://github.com/Shougo/deoplete.nvim没有 C# 源代码,而且我发现配置已经过时。
  • Coc.nvim https://github.com/OmniSharp/omnisharp-roslyn甚至没有列出 C# 并且“非官方”配置存在问题(例如this https://github.com/coc-extensions/coc-omnisharp/issues/9)。此外,Coc.nvim 似乎是 VS Code 的外星人。
  • 语言客户端-neovim https://github.com/autozimu/LanguageClient-neovim我没有找到合理的配置,似乎是因为C# LSP服务器 https://github.com/OmniSharp/omnisharp-roslyn需要 .sln 文件。

所以看来csharpers应该去VS(或Rider),这就是MS提出LSP的时候。如何使 nvim 等 IDE 能够与 C# 一起使用?

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

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

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

你没有提到你的操作系统;我在 Windows 10 和 Mac OS 中都可以使用此功能。如果您使用的是 Mac 操作系统,请确保brew install libuv first.

我的环境

  • Windows 10 (v1903) 和 Mac 操作系统 10.14.6
  • Vim 8.1.2244
  • dotnet core 3.1 - 我希望 3.0 也能工作

指示

首先,我正在使用vim-plug https://github.com/junegunn/vim-plug作为我的插件管理器来处理安装。我使用 vim-plug 的 README 中的 bash/powershell 片段在 Windows 和 Mac OS 中安装了它。

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

"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和麦芽酒。

接下来,找到一些 C# 解决方案,并确保该解决方案在命令行构建(例如dotnet build应完成且没有错误)。如果您还没有 SLN 文件,您还需要一个 SLN 文件(dotnet new sln进而dotnet sln add MyProj.csproj)

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

如果安装没有自动启动,您可以使用以下命令启动它:OmniSharpInstall。安装需要在终端窗口中下载一两分钟。安装完成后,重新打开vim并执行:cd \path\to\my\solution确保vim内的工作目录是正确的。然后用例如打开一个文件:e MyProj\Program.cs.

服务器将自动启动;不要手动启动它。服务器启动时,我在前几秒钟遇到很多语法错误,之后就没有任何错误了。

To pull up the autocomplete, type something like Console. then hit Ctrl-x o:

上面的截图有vim 航空公司 https://github.com/vim-airline/vim-airline对于底部栏——这不是omnisharp的一部分,也不是必需的。

上面的截图是 Windows 下的,但在 Mac OS 下也能正常工作:

我的完整 vimrc可以在这里找到 https://github.com/waf/config/blob/master/_vimrc以及我正在测试的源代码可以在这里找到 https://github.com/waf/catchy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 neovim / vim8 的 C# LSP 自动完成客户端 的相关文章

  • 将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 但没有结果

    我想在我的 WPF 应用程序中将 Image 转换为 ImageSource 我使用正常工作的 Code128 库 已在 WinForms 应用程序中检查 下面的函数返回具有适当大小的 ImageSource 但没有任何内容可见 priva
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 如何在联系我们页面中使用用户电子邮件发送电子邮件?

    我正在创建一个联系我们页面 并且我想从该页面接收邮件 因为它的邮件来自用户邮件 我写了这段代码 var client new SmtpClient smtp gmail com 587 Credentials new NetworkCred
  • 将数组从 C# 编组到 C++ 并返回:PInvokeStackImbalance

    我有一个 C 函数 我想从 C 访问它 问题是我不断收到 PInvokeStackImbalance 异常 但我不知道为什么 当检查异常被关闭时 一切都运行良好并且符合预期 我的 C 函数的签名是 extern C double solve
  • 如何以编程方式确定 C 中 int 数据的最大和最小限制?

    我正在尝试 K R 的练习 2 1 练习内容如下 编写一个程序来确定范围char short int and long变量 两者signed and unsigned 通过从标准标题打印适当的值并通过直接计算 如果计算它们会更困难 确定各种
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 从空白启动时 VSTO 功能区不显示解决方案

    如果我从 文件 新建项目 菜单创建一个新的 Excel 2013 和 2016 VSTO 加载项 项目 然后单击 项目 添加新项目 gt 功能区 可视化设计器 则一切正常 我启动了应用程序 我的功能区显示在 Excel 中 但是 如果我首先
  • 未定义条件编译符号

    我无法让 Visual Studio 按照我的预期运行 我创建了 2 个配置文件 一个定义了符号 FOO 另一个定义了符号 BAR 我有这个代码 static class MyClass if FOO public static strin
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 如何使用 Caliburn.Micro MVVM 将焦点设置到控件

    我有一个表单 我想在发生某些用户操作时将焦点设置到文本框 我知道 MVVM 的处理方式是绑定到 VM 属性 但是 TextBox 没有允许这种情况发生的属性 从虚拟机设置焦点的最佳方法是什么 我创建了一个 IResult 实现 可以很好地实
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • Yield Return == IEnumerable 和 IEnumerator 吗?

    Is yield return实施的捷径IEnumerable and IEnumerator 是的 您可以在我的书 C in Depth 的第 6 章中找到更多相关信息 幸好第六章是免费提供 http www manning source
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • 为了清楚起见,是否应该在返回类型上使用无用的类型限定符?

    当我们的头文件中有原型时 我们的静态分析工具会抱怨 返回类型上有无用的类型限定符 例如 const int foo 我们这样定义它是因为该函数返回一个永远不会改变的常量 认为 API 看起来更清晰const到位 为了清楚起见 我觉得这类似于
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 如何在Asp.Net Core中自定义开发者异常页面?

    这常见于ConfigureStartup cs 文件的方法具有如下所示的代码 if env IsDevelopment app UseDeveloperExceptionPage new DeveloperExceptionPageOpti

随机推荐

  • charindex() 最后计算白色字符,len() 在 T-SQL 中不计算

    我想找到最后一个的索引 性格 但问题是 LEFT target LEN target CHARINDEX REVERSE target 不起作用 因为目标列中的字符串末尾有很多空格字符 并且charindex函数包含空格 但是len没有 有
  • 如何对异步 API 进行单元测试?

    我已经安装了适用于 Mac 的 Google 工具箱 http code google com p google toolbox for mac 进入 Xcode 并按照说明设置单元测试发现here http code google com
  • Android NDK 链接问题

    我用 NDK 编译了 Sox 等 所以 我拥有所有 Android 友好的共享库 我制造了一个简单的测试文件 http pastebin com rniwQ7Gz它调用 sox 函数 NDK 构建告诉我 undefined referenc
  • 尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃

    下面是我在 iMessage 应用程序中的完整代码 class MessagesViewController MSMessagesAppViewController IBOutlet weak var messageView UITextV
  • .net Web 应用程序中的异常处理

    我承认 我不关心太多的异常处理 我知道我应该做得更多 但我永远不知道从哪里开始和从哪里停止 我并不懒惰 离得很远 这是因为我对异常处理的矛盾心理感到过度紧张 即使是最小的应用程序中 似乎也有无数个地方可以应用异常处理 但它可能会让人感觉有点
  • Java 中对象序列化和压缩的性能成本

    应用程序不断接收名为Report并将对象放入Disruptor对于三个不同的消费者 在 Eclipse Memory Analysis 的帮助下 每个进程的 Retained Heap SizeReport对象平均为 20KB 该应用程序开
  • 使用 xslt 比较两个 xml 文件?

    我有 2 个 xml 文件 如何使用 xslt 比较两个文件是否相等 如果不等于意味着第二个 xml 中发生了更改 在 XPath 2 0 中你可以简单地使用fn deep equal http www w3 org TR 2005 CR
  • 检测用户何时点击 div 外部

    我正在向用户展示一个模式 灯箱 当用户单击按钮时 模式会显示 页面的其余部分会变暗 平常的东西 不过我想这样做 如果用户单击模式之外的任何元素 我希望模式消失并且页面恢复正常 如何才能做到这一点 我知道我可以为 body 设置一个 oncl
  • 分配不同价值对象的算法建议

    我有以下问题 给定 N 个对象 N 编辑 通过最公平的分配 我的意思是任何两个玩家获得的物体的价值之间的差异是最小的 另一个类似的情况是 我有N个不同价值的硬币 我需要将它们平均分配给M个玩家 有时他们并没有完全分开 我需要找到下一个最佳的
  • 为什么在 Chrome 中定位:粘性不起作用?

    你怎么获得position sticky在职的 我在 Chrome 26 0 1410 43 m 中尝试了以下操作 但它不起作用 thead position webkit sticky position moz sticky positi
  • $routeProvider 不适用于 html5Mode

    我刚刚开始学习 AngularJs 并尝试使用 Angular 路由服务配置部分页面 它适用于哈希格式 但是 当我试图摆脱哈希时 routeProvider 停止工作 JS app config function routeProvider
  • 使用 JavaScript 创建 csv 文件

    有人可以解释一下是否有一种方法可以将 html5 本地存储数据转换为 csv 文件并将其存储在 ipad 中 我有一个带有一些文本字段的 html 页面 当用户单击提交按钮时 它会存储在 html5 本地存储中 然后我需要使用该数据创建一个
  • 了解 3NF:请用简单的英语

    我正在解决一个示例问题 其中我们试图确定以下哪些关系属于第三范式 3NF 以下是我们给出的关系 R1 ABCD ACD gt B AC gt D D gt C AC gt B R2 ABCD AB gt C ABD gt C ABC gt
  • 如何在不缩小的情况下构建 React 的生产版本?

    背景 我或多或少都在关注使用 React 设置本地开发环境的官方指南 https reactjs org tutorial tutorial html setup option 2 local development environment
  • 将新行添加到控制台输出

    在控制台应用程序中 我们将语句写为 Console WriteLine the addition is 0 i 它给出了输出 加法是50 现在我的问题是 我希望答案如下所示 加法是 50 我如何将输出分配给下一行 Console Write
  • 如何使用 Selenium WebDriver 和 Java 单击按钮?

    以下是按钮的 HTML 代码 span span
  • 什么是沙箱?

    我已阅读维基百科文章 http en wikipedia org wiki Sandbox software development 但我不太确定这意味着什么 以及它与版本控制 如果有人可以用非常简单的术语解释什么是沙箱 那将会很有帮助 A
  • 在 WordPress 中查找当前页码

    我在我的 WordPress 模板中添加了以下自定义循环 args array category not in gt array featured cat gt term id posts per page gt 10 post not i
  • 如何找到UITableViewCell的ViewController?

    我需要参考ViewController from a UITableViewCell以显示UIAlertController来自外部班级 我怎样才能找到该参考文献 你可以获得一个实例UIViewController from UITable
  • 适用于 neovim / vim8 的 C# LSP 自动完成客户端

    我尝试了多种方法来使其发挥作用 但似乎没有简单的方法 是的 有大量的插件和配置 但截至 2019 年 10 月 它们无法正常工作 OmniSharp Vim https github com OmniSharp omnisharp vim客