你先说一下你的需求,你要干啥吧,先不要说你准备怎么做。
你好,我主要在terminal中使用,配合 corfu-terminal, 使用lsp-mode和eglog都没什么问题, 使用lsp-bridge的话orderless的模糊匹配失灵, 像下图:
输入 ta C-e in
时, 可以看到模糊匹配一闪而过然后直接就以 in
为前缀重新刷新candidates了.不知道该怎么debug
复现配置:
(require 'orderless)
(require 'corfu)
(keymap-set corfu-map "C-e" #'corfu-insert-separator)
(global-corfu-mode)
(require 'corfu-terminal)
(setq corfu-terminal-disable-on-gui nil)
(corfu-terminal-mode)
(require 'lsp-bridge)
(require 'lsp-bridge-orderless)
(add-hook 'sh-mode-hook #'lsp-bridge-mode)
emacs 版本是 “29.0.50”, 使用gui没有问题.
其实是想看看能不能把lsp-bridge 返回的references 接到 lsp-ui-peek那边去。
因为我主要用find-reference的话,还是看代码多一点。lsp-ui那边的界面比较sexy lsp-bridge的那个find-reference太强大了。
那就替换 lsp-bridge-popup-references 就好了
直接重定义lsp-bridge-popup-references啊, 真是我未曾设想过的方法
我看了下, lsp-bridge返回的references 是string. lsp-mode 那边返回的是plist. 要接的话。。。
我懂你意思。甚至我想要同步的的 completion 函数,这样就能支持真正的 capf 了(从而避免缓存/手动刷新的问题,而且可以和 company 或者原生 corfu 之类的一起用。
之所以可以同步是因为,如果有用户输入的话可以 abort 这个等待,其实是不会卡的,这也是 eglot 的做法。
懒猫认为这样做缺点是同步等待最多同时只能有一个。
不过我觉得 sleep/sit 不代表 elisp 做不了别的事,比如 process output filter 或者 timer 都是能处理的,所以也不会造成任何卡顿,但我没时间实现一波同步补全来验证。
我认为 lsp-bridge 的优势主要在于复杂计算在 py 中完成,而非完全异步。部分同步接口不会破坏这个优势。
以上算是记录一下我的想法。你说的用同步来支持跳转之类的肯定更没问题了,只是 py 部分得有一些结构性的修改。
补全那个太复杂了,我不太懂补全的机制。不过跳转,查找引用这种我倒是觉得可以用同步去做。因为用户在做这种操作的时候也不会想着去做别的操作啥的。至于语法检查之类的,我感觉可以用异步去做。
换到lsp-bridge是因为有几天我在go下面补全,还有删除的时候卡的要死,不能动的那种。
lsp-bridge的补全弹的确实要快一点。
前几天我又发现好像卡顿跟我开了copilot有关
请教下使用 lsp-bridge 时如何启用 flake 8?
报个issue吧
异步总是好的,你反正都要等,同步和异步有啥区别呢?
lsp-bridge的设计目标就是不论什么操作都不能卡emacs, 其他相冲突的功能都可以用替代方案做。
为了速度,我不是很在乎capf和xref的设计,如果要兼容这些,eglot是更好的选择,但是要忍受偶尔卡一下。
大家可以测试一下比较慢的服务器,比如ruby和vue,lsp-mode卡的动不了,eglot依然会偶尔卡一下,lsp-bridge可以保证绝对不卡手。
这么说也有道理
issue 已报
已经修复了,感谢反馈。
写Rust的时候发现一个问题,这有一段代码
fn test() {
'}
}
敲下这段代码,看看输入 } 的时候会不会直接跳到下一行 这个不知道是 rust-analyser 的问题还是 lsp-bridge 的问题
啥意思,没看懂
你手敲下这段代码试一下吧,看看有没有异常 ps: first let type
fn test() {
}
then try enter rest charaters,
fn test() {
`}
}
你用了我的 grammatical-edit 导致的?