eglot合并到emacs主干代码里了是什么情况?

好了 :face_holding_back_tears: zsbd

1 个赞

我日常使用的就是Golang,什么都不用配置。

非常赞同这一点。

是的,我平时使用的几个server(python, go, rust)都不需要进行任何的配置。

Rust 默认带了 rls 这个后端,不配置eglot 的话,每次 M-x eglot 都要先选后端。(我用 rust-analyzer)

有办法卸载 rls 吗?

你是发行版自带的rust吗,用rustup安装可以自行选择安装的组件吧

就是用的官网的下载链接装的 Getting started - Rust Programming Language

Windows 10:

➜ ~  ✗ which rls
C:\Users\xxx\.cargo\bin\rls.exe
➜ ~  rls --version
error: 'rls.exe' is not installed for the toolchain 'stable-x86_64-pc-windows-msvc'
To install, run `rustup component add rls`
➜ ~  ✗ rustc --version
rustc 1.62.1 (e092d0b6b 2022-07-16)

不该呀,我跟你一样,同时安装了rust-analyzer以及rls,默认启用的就是rust-analyzer。你更新一下eglot看看。而且eglot的源码里面,rust-analyzer也是排在rls前面,优先去选择的。

不是 Eglot 的问题,是因为系统中同时找到了 2 个后端。我一直用的最新的版本 eglot。

重新通过 winget install Rustlang.Rustup 安装 rustup,安装过程如下:

确实没看到安装 rls,但 ~/.cargo/bin 下确自带了 rls.exe

看来只能重命名或者删除这个文件了。

这个可以直接改 eglot-server-programs

因为你是用M-x eglot,也就是interactive方式启动的eglot,这时eglot就会让你选择用哪个server(在有多个server可用的情况下)。我猜 @cabins 是用mode hook的方式?

试了下,估计下载时是全部下载了,可能是 rustup 的 bug,也有可能是刻意为之,只能手动设置一下来 work around 了

1 个赞

可以的,我一直是这样设置。

(add-to-list 'eglot-server-programs '(rust-mode . ("rust-analyzer")

这里讨论的是零配置的情况下,rls 会有干扰。

如果 rust 社区已经不推荐 rls 的话,就不应该自动加 rls 到 ~/.cargo/bin 里面。

默认也可用, 不过它提供不少参数调教, 我会用到几个.

emacs的特色就是扩展性和可配置性, 如果很难配置就不对了.

1 个赞

对,我的确用的是mode hook。

原来如此。估计等我用的再复杂些,就用到了。

同意。对 eglot 和 Emacs 都是负担。

内置也就是省去安装这一步,从此也就跟 Emacs 绑在一起了。假如用户想要修改调试打补丁,或搭配旧版 Emacs 使用,都很不方便。

在以前,安装的确坑了不少新手,但现在已改善了许多。

估计以后论坛会多一种问题:我怎么让emacs加载最新版eglot?

但是很多人不会玩load-path,哈哈哈哈

自主可控还得看lsp-bridge。