大小写看一下corfu得orderless怎么配置吧
(require 'lsp-bridge-orderless)
应该是 require 这个就好了。
像 flycheck 那样在 mode-enable 或者是 save 的时候进行诊断或许也不错?
对,不要实时都还好,只是最近时间不多,慢慢进化吧。
太着急我的睡眠就会不足。
按照大佬所说的,我先更新了最新 lsp-bridge。复制了大佬提供的这份init.el。
用 emacs -Q 启动
然后在 emacs 中 执行了
package-initialize
load-file
~/.emacs.d/init.el
问题依然存在!
那我真的不懂了,确实无法复现
嗯嗯。那就先放一放吧!大佬注意休息!别太劳累啦!这个问题,以后能解决更好!如果找不到原因,最多我改变一下使用习惯,多按一下退格键删除多出来的 > 就好啦!
你可以给corfu-insert 和 corfu-complete 做advice, 发现行尾有两个 > 的时候自动删除一下多余的 >
好的!我试试!
我才写了一个补丁,避免每敲一个字符都发送补全请求
现在只有满足下面三个条件之一才会发送补全请求:
- 光标前的字符是 trigger characters 发送补全请求
- 补全窗口没显示发送补全请求
- 最后一次补全列表是空
这样可以保障 os.path.xxx 敲 xxx 的过程中不再发送补全请求,同时也完整支持 corfu 的所有高级功能,比如 orderless 和 separator 。
这个补丁应该可以提高 volar 这种 LSP Server 的补全性能。
是不是敲 “<” 的时候已经自动补 “>” 了?录个屏幕看看?我这敲 “<” 不会补全 “>” 所以没啥问题。
单纯敲 < 不会补全 >
在 <> 内部敲 stdio.h 才会多补一个 >
目前已经通过一个简单的 advice-add 简单粗暴得实现了想要的效果,自动删除掉多余的 > 了!
(advice-add 'corfu-insert
:after (lambda()
(when (or
(string-equal (file-name-extension buffer-file-name) "c")
(string-equal (file-name-extension buffer-file-name) "cpp")
(string-equal (file-name-extension buffer-file-name) "h")
)
(delete-char -1)
)
)
)
你这个。。。。会把其他补全也都删除最后一个的吧。需要判断一下 “>”
目前自己使用这个简单粗暴的方式,实现了删除多余的 >
;;; add-hook 的方式有问题,本来是想只对 c/cpp-mode生效,
;;; 但在先打开c/c++文件后,再编辑其它类型文件比如python文件,
;;; 也会对python文件生效
;;; 因为对 hook、advice 了解还比较浅薄
;;; 所以暂时等社区大佬或道友给出正确 hook
;; (add-hook 'c-mode-hook #'(lambda()
;; (advice-add 'corfu-insert
;; :after (lambda()
;; (delete-char -1)
;; )
;; )))
;;; 目前通过以下简单粗暴的方式实现了想要的效果
;;; 因为是自己用,就没有加上对前后字符 > 的判断
;;; 其实说实话,我是不会
(advice-add 'corfu-insert
:after (lambda()
(when (or
(string-equal (file-name-extension buffer-file-name) "c")
(string-equal (file-name-extension buffer-file-name) "cpp")
(string-equal (file-name-extension buffer-file-name) "h")
)
(delete-char -1)
)
)
)
是的,目前我不会写判断 望赐教!
基于你的这个描述,干嘛要先敲 <> 再补全。。。 直接敲 < 去自动补全不就好了。
因为,在敲 #include 时,按tab键就自动输入了
#include <|>
并且光标停留在了<>内部,这时再输入 std 就会出现候选,并且每个候选尾部都带一个 >,类似这样的形式
stdio.h>
那么加上之前的 #include<> 就变成了
#include <stdio.h>>
整个过程是不用敲 < 或 >的
因为是给 corfu-insert加的advice。所以目前我这边是按 回车键 才会生效,删除多余的>。根据我个人的使用情况,没有出现误删 下一步是想研究一下判断光标前后字符是否都为 ’>’,再决定执行。
光标前用 before-char 光标后用 after-char
字符转字符串应该是 char-to-string
我手机打的字,API名字不一定记得准。