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

我试着把这个函数注释成了空函数,可以在字符串弹出补全窗口了,可是不知道是不是还需要其它设置,弹出的窗口中只有 Yas-snippet 的补全,并没有达到我之前使用 Company 时的效果。

我的预期是,比如下面这样的代码

TwoArgCommands = {
    "push":			"C_PUSH",
    "pop":			"C_POP",
    "function":	 	"C_FUNCTION",
    "call":		 	"C_CALL",
}

我想以后在输入字符串的时候,输入 C 就能弹出相应的 C_PUSH, C_POP, C_FUNCTIONC_CALL

不知道是不是我其它地方的设置出了问题,请大佬指教0-0

你先看看 lsp-bridge/lsp-bridge.el at a1ad7768e2cdd0c78cb377adbd8096b7f4d2e00d · manateelazycat/lsp-bridge · GitHub 这行代码执行没有?

这行代码是激活 lsp-bridge 搜索当前buffer单词的搜索后端。

以前都是在字符串里禁用补全的, 没有关注这方面。

acm 有可能支持多行的补全吗?类似 copilot 的场景,能够提供多行的提示,如果 acm 能支持多行补全,是不是也可以通过某种方式接进来

已经支持codeium了呀,codeium就是多行。

没注意,那我研究一下,看看能不能接个 copilot

谢谢大佬提示.


我现在能锁定问题是由于 current_word 带了 ",所以没有办法搜索出结果,我如果手动去除掉 current_word 中的 " ,就会出现相应的搜索结果。

这里的两行代码被我修改成了

(unless (or (null current-word))
  (if (lsp-bridge-is-remote-file)
      (lsp-bridge-remote-send-func-request "search_file_words_search" (list (my-remove-quotes current-word)))
    (lsp-bridge-call-async "search_file_words_search" (my-remove-quotes current-word)))))))

其中 my-remove-quotes 函数如下:

(defun my-remove-quotes (str)
  (when (string-prefix-p "\"" str)
    (setq str (substring str 1)))
  (when (string-suffix-p "\"" str)
    (setq str (substring str 0 -1)))
  str)

但是现在我这样改,选择候选项时,会替换掉左边的 " 比如我输入的 "C_" 然后候选框中会有 C_GO , 我选择了 C_GO 以后,就会被补全成 C_GO" 少掉了左边的 "


尝试看己看了一下代码,但是水平不足,实在定位不到最后补全生成的位置以及相应的优雅的解决方案 :dizzy_face:。希望大佬能指点一二。

大佬,我将 lsp-bridge-enable-org-babel 设置成 t 了,可是在 org 文件的代码块中,还是只能弹出 search-word 和 yasnippet 的补全。

代码的是按照下面的格式定义的:

#+begin_src emacs-lisp

#+end_src

请问是还需要进行其它设置吗?


另外一个问题是,我启用了 lsp-bridge-enable-org-babel 后,我通过 org-protocl 截取 html 的插件就失效了,提示 No server buffers remain to edit.,把 lsp-bridge-enable-org-babel 设为 nil 后,就一切正常了,不知道是否是这个选项背后对 org-protocol 进行了特殊的操作?

截取 html 的插件如下:

你 emacs -Q 做了对比测试了吗?

最新版已经修复了

现在你只需要 (setq lsp-bridge-enable-completion-in-string t) 设置一下, 就可以在字符串里补全 buffer 单词了。

1 个赞

啊啊啊,谢谢大佬 :hugs: :smile: :clap:


emacs -Q 启动了,org-babel 补全还是不生效

就只运行了下面的代码

(add-to-list 'load-path "~/.emacs.d/lisp/")
(add-to-list 'load-path "~/.emacs.d/site-lisp/")
(package-initialize)


;; Bootstrap `use-package'
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(add-to-list 'load-path "~/.emacs.d/site-lisp/lsp-bridge")

(require 'yasnippet)
(yas-global-mode 1)
(require 'lsp-bridge)
(global-lsp-bridge-mode)
(lsp-bridge-mode t)
(setq lsp-bridge-enable-hover-diagnostic t)
(setq lsp-bridge-enable-org-babel t)

image

没有函数的补全

请问大佬,是还需要有其它的设置吗。


还没有试我自己的 capture-html 失效的原因

search-word 的词好像是会随着输入慢慢补全。不知道有没有设置让其可以全部补全。

比如下图的输入状态中,我想让 C_FUNCTION 也出现在候选框中。

image

你要补全 org-babel 的什么语言?

emacs-lisp.
就是想在 org 里面写一些配置。


也试了 Python,一样的没有效果。

你看看 *lsp-bridge* 有啥报错没?

没有错误,在 .el 文件和 .py 文件里面,补全都是有效的。但到了 org-babel 块里面,就只有 org mode 下的补全了。



大佬有什么排查问题的指导吗?这个原理是不是在 org-babel 创建了一个独立的 Mode? 如果是的话,我要如何确定这个 mode 确实创建了呢?


或者说是不是 org-babel 还需要有什么特殊的设置或者语法来触发这个 mode?

因为要实时把Buffer内容实时发送到 Python 那边, 我担心性能问题, 加了1秒延时。

上面这个补丁把延时去掉了, 你先尝试一下吧, 可以实时补全单词了, 如果以后有性能问题, 我再想办法按照文件大小加延时。

我帮你 @kongds 大佬吧, org-babel 是这位大佬开发的, 我刚刚试了一下, 确实坏掉了。

谢谢大佬 :hugs:

大佬,应该不是延迟的问题,我感觉是我问题没有描述清楚。

这个不是我等待一会儿后 C_FUNCTION 就会出现在候选框里面,而是我必须再输入一个 FC_FUNCTION 才会出现。

image


感觉像是哪里限制了输出或者限制了显示的字符串的长度?


TwoArgCommands = {
    "push":			"C_PUSH",
    "pop":			"C_POP",
    "function":	 	"C_FUNCTION",
    "call":		 	"C_CALL",
}