LanguageClient-neovim 补全实现的若干问题

2018-04-30 23:45:27 +08:00
 chemzqm

为了体验 LSP 的效果,最近试用了下 LanguageClient-neovim 这个插件(以下简称 LCN )。

总的来说 LSP 的基本功都已实现,但是细节体验上还跟 vscode 存在很大差距,尤其是在补全功能的实现上面。

我给作者提了几次 issue, 但是似乎作者不愿意讨论相关问题,所以记录在此,以供诸位 vim 用户参考、讨论。

LCN 补全中存在的问题

如何解决?

问题根源在与 neovim/vim 提供的 complete 功能无法支持 LSP 中的 TextEdit 以及 snippet 等定义,所以我提了一个需求 https://github.com/neovim/neovim/issues/8334

6554 次点击
所在节点    Vim
15 条回复
congeec
2018-05-01 02:17:11 +08:00
所以要作为 source 陪 deoplete 之类的用
不过 deoplete 体验不如 ycm 前端
autozimu
2018-05-01 05:53:58 +08:00
并不是我不想讨论这些问题. 而是在你了解具体问题的复杂性之前讨论并不能解决问题. 再者, talk is cheap. 我的时间很有限, 不想把它浪费在无谓的争论上.

1. 这么做是有原因的. 因为的确部分用户(包括我)通过一些个设置是能够利用 snippet 的功能的. https://github.com/autozimu/LanguageClient-neovim/pull/327 而且我也加入了最新的 configuration override 这个检测.

2. 推荐你去尝试了解下 deoplete 整个的 workflow, 重点 deoplete 什么情况下触发 completion. 在用到这个 regex 的时候, 根本还没有 LSP server 的 response, 何谈根据 LSP response 判断起点. `\ w` 只是目前的一个权宜之计.

3. 同 2

4. 这个是因为 deoplete 并不理解 LSP 的 TextEdit 概念. deoplete 期望收到的是 word, 而某些 LSP server 返回的是 TextEdit, 所以需要这一步的装换. comment 里面我也写到了, extremely hacky. 如果你发现了某些情况下这个 hack 会有问题, 当然欢迎你的 PR, 但不是这种会造成 regression 的 https://github.com/autozimu/LanguageClient-neovim/issues/409

我再重复一遍, 我的时间有限, 不想浪费在讨论和争论上. Show me your code.
yuuko
2018-05-01 06:32:18 +08:00
目前的 vim/neovim 上 lsp 体验不好,还是等 neovim 官方支持,不过貌似还要很长时间
muziki
2018-05-01 06:50:06 +08:00
ale
试过 lcn 这个插件 用了 ale 之后就回不去了
hanxiV2EX
2018-05-01 09:14:30 +08:00
NCM 怎么样?
congeec
2018-05-01 09:14:43 +08:00
开源嘛,能动手就不逼逼
skywind3000
2018-05-01 12:56:11 +08:00
@autozimu 快支持一下引用结果添加到 quickfix 窗口,我正在帮你的 LanguageClient-neovim 写评测呢。
congeec
2018-05-01 13:00:51 +08:00
@hanxiV2EX 作者没精力维护 @roxma。基本凉了
wsdjeg
2018-05-01 13:12:42 +08:00
关于 lsp 的支持,我个人觉得还是等 neovim 的官方 PR 比较合适,我已经本地测试过这个 PR,基本能完成正常补全。

https://github.com/neovim/neovim/pull/6856
glues
2018-05-01 16:06:23 +08:00
这不正是自己造轮子的好机会吗
omph
2018-05-01 18:09:09 +08:00
作为一个旁观者,我想说,neovim 有时中文乱码
chemzqm
2018-05-02 00:31:56 +08:00
@autozimu 我只是想让更多感兴趣的人能了解这里存在的问题,已避免浪费过多时间。
解决办法已经有了,我正在实现

@glues 说的很对,是时候出现一个支持 text edit 和 snippet 的补全插件了
chemzqm
2018-05-02 00:41:33 +08:00
@wsdjeg 就是不知道啥时候能 merge,而且也是不支持 text edit 和 snippet 这些 LSP 2.0 的东西,LCN 除了补全有些问题,其它功能例如 hover,signature,diagnostic 还是比较好用的。
chemzqm
2018-05-02 00:51:07 +08:00
@autozimu
> 1. 这么做是有原因的. 因为的确部分用户(包括我)通过一些个设置是能够利用 snippet 的功能的. https://github.com/autozimu/LanguageClient-neovim/pull/327 而且我也加入了最新的 configuration override 这个检测.
你说的能利用是让 complete item 里面的 word 对应到自己创建 snippet 然后再通过特定快捷键触发补全吧?这种无视后端返回数据然后嫁接到自己实现的东西都不出 bug ?
pony279
2018-07-09 12:57:21 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX