lsp-bridge -- 速度最快的语法补全插件

好的,感谢提供思路, :+1:
一会儿我回家试试写下

尝试写了一下,目前效果可以,基本上通过这个 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-mode, 大家有问题,可以给 @yqu212 大佬反馈。

在代码块里面用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)))

再试一下,看看还有没有多余 > 的问题?

不但没有解决,反倒在按回车键时,会多出更多的内容(划红线处的内容)



是我没有修改正确?这是 lsp-bridge.el 中 delete-end-pos 定义的位置吧?

clangd 的版本是多少?

11.0.1-2 cccd

clangd version 13.0.1

看看你能升级不? 我怀疑你的 clangd 有问题。

感觉不是版本的问题,我的另一台电脑安装的是 13.0.1 的版本,也是如此



按回车键后

暂时没有头绪,你还是用 advice 吧。

好的!大佬辛苦啦! :+1: