是不是需要更新了?
我用的straight 不知道咋更新,重装一下就好了
请问如何让copilot和corfu一起使用呢?刚入门corfu,想达到跟company如此配置类型的效果:
(defun my-tab ()
(interactive)
(or (copilot-accept-completion)
(company-indent-or-complete-common nil)))
(use-package! copilot
:hook (prog-mode . copilot-mode)
:hook (text-mode . copilot-mode)
:bind (("C-TAB" . 'copilot-accept-completion-by-word)
("C-<tab>" . 'copilot-accept-completion-by-word)
:map company-active-map
("<tab>" . 'my-tab)
("TAB" . 'my-tab)
:map company-mode-map
("<tab>" . 'my-tab)
("TAB" . 'my-tab)))
我直接给copilot加了几个单独的快捷键
:config
(bind-key "M-C" 'copilot-accept-completion)
(bind-key "M-L" 'copilot-clear-overlay)
(bind-key "M-N" 'copilot-next-completion)
(bind-key "M-P" 'copilot-previous-completion)
可以通过 C-h k
来看当前某个快捷键(比如 tab)绑定在了哪个 keymap 里,然后用类似的方法替换一下就好了。
等你配好了 corfu 不如来分享一波配置,我塞到 readme 里去(或者你来提 PR 也行)。
你试试
(defun my-tab ()
(interactive)
(or (copilot-accept-completion)
(corfu-complete)))
话说能参考 GitHub - 50ways2sayhard/tabnine-capf: A capf version of company-tabnine: https://github.com/TommyX12/company-tabnine 直接使用 capf 么
这样可以像下面那样通过 cape 把几个后端聚合到一起:
(when (fboundp #'tabnine-completion-at-point)
(add-hook 'eglot-managed-mode-hook
(defun merge-eglot-with-tabnine ()
(remove-hook 'completion-at-point-functions #'eglot-completion-at-point t)
(add-hook 'completion-at-point-functions
(cape-super-capf
#'tabnine-completion-at-point
#'eglot-completion-at-point) nil t))))
肯定是可以的,其实最开始我想写成 company 后端来着。
问题在于,copilot 给的补全是多行的,没法完整地作为候选项显示。
另一个问题是,copilot 的补全有网络延迟,通常是一两百毫秒,这可能会导致别的补全得等 copilot,整个体验会下降。
嗯嗯,明白了。tabnine 也有延迟,我这边貌似没有就不显示,不过多行确实是问题,那现在这样也挺好。
emacs 29 和懒猫的lsp-bridge
一起使用时,鼠标的位置不太对诶,在np后面,理应在nump后面,有什么解决方法嘛
可复现的配置在 dotfiles/init-emacs.el at master · lyjdwh/dotfiles · GitHub
见 readme 里的 known issues,把一个兼容性选项关了就好。
不知道有没有更好的解决方法。。。
我又折腾了一会,似乎彻底解决了这个心头大患(光标位置正常+没有兼容性问题
在我这里确实彻底解决了,开了annotate-mode
也没问题,光标位置也正常
我之前也是这么写的,记得有个问题是按下tab只能接受corfu的补全。我现在换回company了,等以后有时间了再试试~
现在使用corfu 和 cape 的一些后端,copilot 光标位置就正常了
但是再加上 lsp-bridge (目前也使用corfu),光标位置和补全窗口就会在当前输入位置和copilot补全末端 来回跳跃 -_-
似乎还有些兼容性问题
可以用 dotfiles/init-emacs.el at master · lyjdwh/dotfiles · GitHub 测试下
我用 company-box 也有这个问题 之前的两种方案似乎没这个问题,但又有别的问题
难受啊,三种方案都不完美
company-box 和 corfu 都是用的 child-frame,同样的 child-frame 感觉会有通用地方法滴
或者 就根据补全前端设置具体使用哪个方案了
ps: 之前我用 company-box 搭配 copilot ,挺完美的
修了一下,但我只测了 company-box 。
原因是 posn-at-point 得到的位置是 overlay 里 after-string 结束的位置。(参考 motion - Calculating cursor position excluding the overlay after-string - Emacs Stack Exchange
于是 advice 了一波
现在corfu 能用了,但还有个问题,每次copilot 更新补全时,光标会跳到 copilot补全末端 然后再自动跳回来,如果copilot 更新补全比较频繁,光标来回跳就看着不太舒服
修了 (之前某个版本误删东西引入的 bug