在 Archlinux 上使用 Vim 作为 IDE for Haskell 目前的情况是什么?

What is the current situation for using Vim as IDE for Haskell on Archlinux?

如果可行的话,我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令完成。在这方面,正如您在下文中看到的,我还没有找到关于如何让它发挥作用的共识。

相关的最新评论issue on YouCompleteMe are not that old, therefore I installed haskell-ide-engine from the AUR (the repo on GitHub is here

然而,因为它花了这么长时间(花了 110 分钟!)我检查了 PKGBUILD 文件只是为了发现这个:

# ...
# Supported are '8.4.2' '8.4.3' '8.4.4' '8.6.4' '8.6.5' '8.8.1' '8.8.2' '8.8.3'
# activated by default are the ones also used in a stackage snapshot. Removing
# versions you do not use will greatly reduce the compilation time of this
# package
_enabled_ghc_versions=('8.4.4' '8.6.4' '8.6.5' '8.8.2' '8.8.3')
# ...

很公平,我的错。所以我在 #haskell IRC channel 上搜索帮助,一位用户发表了这样的评论:

and then you find out that hardly anybody uses haskell-ide-engine anymore but haskell-language-server. and also that ghcup can install the prebuild binaries for you

另一个用户的评论是

the haskell situation on Arch is not optimal, to say the least

另一个评论(来自 Fendor, 已经在下方)是

HIE is not actively developed anymore. Haskell Language Server is the successor. I would recommend Haskell Language Server

这似乎与您在 YouCompleteMe issue tracker.

上阅读的内容不符

那么现在是什么情况呢?

Haskell IDE 引擎和 Haskell 语言服务器开发人员。

没错,Haskell IDE 引擎不再积极开发了。 ghcide 和 Haskell IDE Engine 团队合力创建了 Haskell Language Server(基于 ghcide 作为主要驱动)。因此,Haskell Language Server 是当前的开发重点,我们建议您优先使用它而不是 Haskell IDE 引擎,因为它更快更稳定。它还具有许多新功能,并且很快将达到 feature-parity Haskell IDE 引擎。

Haskell 语言服务器可以通过 ghcup 安装,VSCode 插件 Haskell 也可以自动安装二进制文件。

希望 blog post 能更好地概述情况。

基于this,您应该能够使用

  let g:ycm_language_server = [
    \   {
    \     'name': 'haskell-language-server',
    \     'cmdline': [ 'haskell-language-server-wrapper', '--lsp' ],
    \     'filetypes': [ 'haskell', 'lhaskell' ],
    \     'project_root_files': [ 'stack.yaml', 'cabal.project', 'package.yaml', 'hie.yaml' ],
    \   },
    \ ]

通过安装 ghcup and then installing all the rest (ghc, cabal, ...) via ghcup, as suggested in 设置 Haskell,改善了 Vim 和 YCM 的体验。 (哦,很明显,YCM 必须是最新的。)