欢迎使用 Nox -- 轻量级 LSP 客户端

为什么eldoc会导致性能不好?我感觉用 eldoc 很流畅啊,显示的成本应该不高才对。

如果你单个看还好,但是你在高速写代码的时候,反复提示就会非常卡。

elgot就是每补全一下就显示一下eldoc文档,你可以对比一下,相对Nox来说,很多时候都有点卡手。

1 个赞

如果给 eldoc 设置一个 eldoc-idle-delay 的话会解决这个问题吗?

不行,因为会有很多文档请求会源源不断的过来,高速写代码时会延迟卡吨。 我能想到的是,打字停留多长时间后临时请求一下,有点像auto-save的处理逻辑,手指头犹豫的时候显示一下文档。

估计实现不了,有些server(比如mspyls)是不会单独吐函数的参数列表, 而文档内容,我看到很多函数第一行都不是参数列表。

所以目前还没有一个统一的方法只获取一行的参数明细数据。

还是我的建议,如果实在记不住,用nox-show-doc临时看一下最靠谱。API熟悉了就不用看了。

3 个赞

咨询一下, nox-show-doc 和 xref-find-definition 是使用了不同的实现吗?

我在用 gopls,项目比较大,文件比较多,但是 nox-show-doc 可以很快输出,xref-find-definition 就会卡住 几十秒 之后跳转到定义

xref 有点像 company,本身不具备任何实现,而通过注册 backend 来完成工作。

你看下 (xref-find-backend) 结果是什么,开启 lsp 会得到 xref-lsp。

(xref-find-backend) 返回 nox

xref-backend-functions 是

xref-backend-functions is a variable defined in ‘xref.el’.
Its value is (nox-xref-backend t)
Local in buffer xxx.go; global value is 
(etags--xref-backend)

看起来是在用 nox 的,global value is (etags--xref-backend) 这个会生效吗?

xref-find-definition 计算量比较大,这个和后端实现有关吧。

nox-show-doc 就是请求文档请求,一个请求,和 xref-find-definition 没啥可比性啊

这人的代码水平好不好我不好评论,但是eglot上花的功夫显然是比不上lsp-mode的作者。对于cc-mode的用户,不客气的讲,eglot是属于不可用的状态,因为每次用M-q格式化注释,eglot的代码位置追踪立刻乱掉。我提的可以100%重现的bug报告已经4个多月了,也没有什么动静。我自己也是做软件的,很清楚能100%重现的bug是不存在修不好这种可能性的,只是肯不肯下工夫的问题。如果不是可以选择lsp-mode,我大概已经自己去调试了,但是既然有得选择,那直接换门就是了。

5 个赞

链接发出来看看?

我看了一下楼上链接,最近还有回复,说明还是有在关注的,只是大佬可能真的很忙,而解决这个问题对他来说不是那么迫切。

对LaTeX试用了一下Nox,文档中推荐的服务端digestit,我没使用成功,反倒是另外一个服务端texlab基本上是可以使用的,但是发现一个问题:对于参考文献的补全,如果参考文献(使用bib文件)的索引中出现下划线,冒号等字符补全会出现问题。

比如有两条参考文献,其索引分别是Gromov_1983aaGromov_2019aa。当输入Gro时会弹出包含这两项的补全列表。同时,我把TAB键绑定到了company-complete-common-or-cycle上。那么,当我按一下TAB时,期望的行为应该是把内容补全为Gromov_,同时保持补全列表,再按一下TAB会切换补全列表中的高亮项。但实际出现的行为却是,第一次按TAB时,确实文字内容补全为Gromov_,但问题是此时补全列表就消失了,再按TAB也无法把补全列表唤出。

如果索引中只有字母和数字似乎一切工作正常。看起来company的后端实现在这种情况下有些问题,另外一个company后端,company-reftex就可以很好的处理这种情况。

开源软件就是这样的,要不自己上,要不就不要强求别人。 毕竟没给别人钱,别人也没有必要为了让所有人爽,生活失衡,开源软件的作者其实是非常辛苦的。

6 个赞

你说得很对,如果没有其他选择的话我大约就自己上了。只是评论一下这位作者对这个项目的积极性不如lsp-mode的作者,我觉得这是一个客观事实。

3 个赞

非常同意lsp-mode作者的积极性真的太强了!可以上 emacs-lsp/lsp-mode - Gitter 看看,几乎所有问题无论低端高端他都会乐意解答。

但是这种积极性能维持多久呢? 这是一个尴尬的问题

2 个赞

我感觉是after-change-function的问题,试图在c-fill-paragraph里找问题,但是发现没有这么简单:c-fill-paragraph虽然会用inhibit-modification-hook暂时屏蔽after-change-function,但是并没有屏蔽不应该屏蔽的修改。我现在也不知道问题在那。

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40338

1 个赞

我也试了一下LaTeX,还没有详细调整细节,现在主观感受是比eglot快。

texlab没问题,而且Manjaro的仓库里就有。但digestif报错:

Error in post-command-hook (nox-monitor-cursor-change): (void-function posframe-hide)

(nox-monitor-cursor-change)我还不知道是哪边的问题,再试试……


关于digestif,我是yay安装的luarocks,然后:

luarocks install digestif --local

装好后路径在~/.luarocks/bin/digestif