补丁已经合并,感谢大佬支持!
依然还是没有影响!
我又对比了一下 company+lsp 与 corfu + lsp-bridge 触发候选~输入的方式
这是我感受到的 company+lsp 的触发输入方式:按 tab 循环候选,但不会立刻输入选定的项目,而是在按回车键后才输入选定内容。
这是我感受到的 corfu + lsp-bridge 的触发输入方式:按 tab 循环候选,同时,就直接输入了选定项目。
或许多出一个 > 与 lsp-bridge 的触发输入方式有关?
或许,可以通过设置 corfu 解决?我之前没有用过 corfu,对其配置还不太了解
问题是,不管corfu上不上屏,你都不应该有两个>
你真的试了 emacs -Q 只加载lsp-bridge,不要加载任何其他插件的对比测试了吗?
emacs -Q的时候也不要定制corfu ,最小配置对比下。
我觉得是你的配置在干扰。
似乎是 electric-pair 之类的东西,在你敲 < 的时候就自动补了一个 >, 然后 clangd 看见 < 给你也补全了头文件的 >, 然后一起加上就这样了。
我也遇到了同样地问题,暂时还没解决
我没有用 emacs -Q 的方式。但是我的 init.el 配置只写了 lsp-bridge 设置,没有任何其它设置。问题依然存在。
不知道这和 emacs -Q 的方式是否有区别?
;;; init.el | only use lsp-bridge
(add-to-list 'load-path (concat user-emacs-directory "/lsp-bridge" ))
(require 'lsp-bridge)
(require 'yasnippet)
(yas-global-mode 1)
(require 'corfu)
(global-corfu-mode)
(setq lsp-bridge-completion-provider 'corfu)
(require 'orderless)
(require 'markdown-mode)
(require 'corfu-info)
(require 'corfu-history)
(require 'lsp-bridge-icon) ;; 显示图标在补全菜单中,可选
(require 'lsp-bridge-orderless) ;; 支持模糊搜索,可选
(corfu-history-mode t)
(global-lsp-bridge-mode)
(when (> (frame-pixel-width) 3000) (custom-set-faces '(corfu-default ((t (:height 1.3)))))) ;; 让corfu适应高分屏
;; For Xref support
(add-hook 'lsp-bridge-mode-hook (lambda ()
(add-hook 'xref-backend-functions #'lsp-bridge-xref-backend nil t)))
;;; for evil
;;; way-1
(add-to-list 'lsp-bridge-enable-popup-predicates
'((lambda ()
(and
(< corfu--index 0) ; not select a candidate
(or (not (featurep 'evil)) (evil-insert-state-p))))))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
嗯嗯,感觉是的!
怎么过滤空格补全问题?我补全完后 空格又弹补全,字符加上空格不生效
详细带截图说,没看懂,请不要只抛出问题,详细的告诉我你正在编辑的文件内容,空格的场景,问题的截图。
你就说一句话,我不可能猜到你说的啥意思。
;;; init.el | only use lsp-bridge
(add-to-list 'load-path (concat user-emacs-directory "/lsp-bridge" ))
(require 'lsp-bridge)
(require 'yasnippet)
(yas-global-mode 1)
(require 'corfu)
(global-corfu-mode)
(setq lsp-bridge-completion-provider 'corfu)
(require 'orderless)
(require 'markdown-mode)
(require 'corfu-info)
(require 'corfu-history)
(require 'lsp-bridge-icon)
(corfu-history-mode t)
(global-lsp-bridge-mode)
(when (> (frame-pixel-width) 3000) (custom-set-faces '(corfu-default ((t (:height 1.3)))))) ;; 让corfu适应高分屏
这应该是最小配置,但是我说的是你应该 emacs -Q 启动后,只加载你的这个 init.el 文件。
按照你 init.el 的内容看,你还有其他配置文件,而你的其他配置文件会干扰 lsp-bridge ,产生你现在遇到的 bug.
emacs -Q的目的是让你只加载 lsp-bridge 和它的依赖,而不是 lsp-bridge 的配置文件只有这些内容,要完全排除其他插件的影响。
同时每次测试的事情,请先更新到最新版,避免已经修复的问题反复出现。
使用过程中,发现补全有时候是大小写敏感的。
另外问下,怎么在结构体内像lsp-mode一样自动补全填充结构体字段。
比如这个,想要把所有字段自动补全。
你说的第一个问题我昨天已经推送补丁修复了呀
更新最新版后,如果还有问题, 在你认为的空格处, 执行一下 (lsp-bridge-not-only-blank-around-cursor)
看看返回什么?
自动展开结构体的问题,我不知道。
空格的问题解决了。 补全大小写敏感么?必须正确输入大小写才提示补全
要支持语法检查了吗,我看见TODO里面已经有cache 诊断信息的计划了
先提issue吧,每次提交问题的时候,建议先更新到最新版先看看是不是已经修复了
只是计划,最近太忙了,不会那么快的实现。
想要快点的话,可以自己尝试写补丁。
目前的计划是,诊断信息过来以后,先暂时存储在 lsp-bridge python 这一端, 用户 idle 1~2秒以后才从 python 端 Pull 最新的诊断信息,然后对接到 flycheck 或者 flymake 的接口去显示错误或警告。
不会像 lsp-mode/eglot 那样实时显示诊断信息,第一编写代码过程中没有必要看,第二实时解析诊断信息会卡手,停下敲键盘 1 ~ 2 秒去获取一下足矣。
我看了一下 flycheck 代码 1.2万 行,如果只是简单的错误显示和跳转,用 overlay 估计100行以内就搞定了。
最近太忙没时间,大佬感兴趣的可以按照我上面的思路去实现。
支持Pull diagnostic 的 lsp server好像都没见到(3.17的标准最近才发布吧)。用lsp-bridge暂存确实可以。lsp-bridge确实挺快的。
用3.16就可以,因为lsp-bridge天然可以帮emacs做缓存。
3.17五一的时候才发布,3.17的pull机制要长链接,估计只有很少编辑器能支持的了长链接。
基于3.16用lsp-bridge来缓存就挺好的。