好的,感谢提供思路,
一会儿我回家试试写下
尝试写了一下,目前效果可以,基本上通过这个 advice 解决了问题!我目前使用的是 evil 模式,也是有效的。
tab 循环候选时不破坏输入,只在按下 回车键 触发 corfu-insert 时生效,删除多出来的 >
(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")
)
(if (and
(string-equal (char-to-string (char-after)) ">")
(string-equal (char-to-string (char-before)) ">")
)
(delete-char -1)
)
)
)
)
目前自己的 lsp-bridge 配置。
;;; ========== require ==========
;;; all-the-icons has been loaded
;;; orderless has been loaded
(use-package posframe)
(use-package yasnippet)
(use-package markdown-mode)
(use-package corfu
:custom
(corfu-cycle t)
(corfu-preselect-first nil)
:bind
(:map corfu-map
("TAB" . corfu-next)
([tab] . corfu-next)
("S-TAB" . corfu-previous)
([backtab] . corfu-previous)
)
:init
(global-corfu-mode))
;;; for c/c++ #include
(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")
)
(if (and
(string-equal (char-to-string (char-after)) ">")
(string-equal (char-to-string (char-before)) ">")
)
(delete-char -1)
)
)
)
)
;;; ========== lsp-bridge settings ==========
(add-to-list 'load-path (expand-file-name "lisp/blove-extra/lsp-bridge" user-emacs-directory))
(require 'lsp-bridge)
(yas-global-mode 1)
;;; corfu setting:
(setq lsp-bridge-completion-provider 'corfu)
(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)))
1 个赞
大佬写了一个补丁,可以直接在 org-mode 启用 lsp-bridge, 让你在 org-mode 代码块中写代码也可以补全,大家可以尝试一下。
7 个赞
这可太舒服了!
在代码块里面用org-edit-special就能看到效果了。现在默认打开了python的
Boss 可以把python脚本单独剥离出来做管理吗,不然每次升级都得去复制一遍
其他语言要自己加到lsp-bridge-org-babel-lang-list里面。
clangd 的 repo 有一个一样的 issue。
那看上去是 textEdit 的 replace 实现得还是有问题 (还得确认一下 clangd 返回的 range 有没有覆盖右尖括号
为啥不用git管理?
你打开 lsp-bridge.el 找到 delete-end-pos, 把 delete-end-pos 的定义换成
(delete-end-pos (if text-edit
(lsp-bridge--lsp-position-to-point (plist-get (plist-get text-edit :range) :end))
(point)))
再试一下,看看还有没有多余 > 的问题?
clangd 的版本是多少?
11.0.1-2
clangd version 13.0.1
看看你能升级不? 我怀疑你的 clangd 有问题。
暂时没有头绪,你还是用 advice 吧。
好的!大佬辛苦啦!