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

更新 lsp-bridge 后重启一下 emacs 吧, 我没有你说的问题。

我用起来好像没啥问题 我的org版本是9.6.6 lsp-bridge的配置在这里.doom.d/init-lsp-bridge.el at main · kongds/.doom.d · GitHub

我重启了,连 .session 我都尝试删除了。可还是我图片中的那个效果。大佬是完整添加了下列的代码吗? 还是只添加了 C_FUNCTION

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

我这边的结果是如果 C_ 开头的词过多,则 C_FUNCTION 就不会出现,否则就会出现。

不出现:

image

出现:

嗯, 我知道了, 我一会推送一下补丁。

更新吧

增加了一个选项 acm-backend-search-file-words-max-number: Search Words 补全候选词限制, 默认是 10

1 个赞

阿,只有 elisp 才会生效。 我写的是 emacs-lisp 就不会生效。

那大佬的 Python 生效吗?我写 python, py, python3 都不生效


还有一个问题就是 lsp-bridge-enable-org-babel 似乎会改变 org-protocol 原有的行为

生效了,谢谢大佬 :grinning: :grinning:

image

没有 这个是根据org-src-lang-modes里lang 对应的mode来的,如果要用emacs-lisp或者可以其他名字的可以往这个list里加

(defcustom org-src-lang-modes
  '(("C" . c)
    ("C++" . c++)
    ("asymptote" . asy)
    ("bash" . sh)
    ("beamer" . latex)
    ("calc" . fundamental)
    ("cpp" . c++)
    ("ditaa" . artist)
    ("desktop" . conf-desktop)
    ("dot" . fundamental)
    ("elisp" . emacs-lisp)
    ("ocaml" . tuareg)
    ("screen" . shell-script)
    ("shell" . sh)
    ("sqlite" . sql)
    ("toml" . conf-toml))
  "Alist mapping languages to their major mode.

The key is the language name.  The value is the mode name, as
a string or a symbol, without the \"-mode\" suffix.

For many languages this is simple, but for language where this is
not the case, this variable provides a way to simplify things on
the user side.  For example, there is no `ocaml-mode' in Emacs,
but the mode to use is `tuareg-mode'."
  :group 'org-edit-structure
  :package-version '(Org . "9.6")
  :type '(repeat
	  (cons
	   (string "Language name")
	   (symbol "Major mode"))))

另外一个问题可能是得禁用org 临时buffer中的lsp-bridge mode 可以参考这个.doom.d/init-lsp-bridge.el at 59e32636c7b1dae5090bf66f4212bdb59a188340 · kongds/.doom.d · GitHub

2 个赞

应该是今天最后一个问题了 :dog:。。

开了 sdcv-helper 是不是就只有单词选项,而禁用掉其它的选项了。我觉得是不是把字典中的单词放在最后面效果会好一点?

image

sdcv单词会返回很多, 混用会导致单词大量干扰别的后端, 别的后端根本就没法选择。

现在设计是, 英文补全临时开关。

1 个赞

明白了,谢谢大佬。 怪不得只有这个选项专门设置了一个 toggle.

我补全不了应该也是这个原因, 我在README加了对 org-src-lang-modes 的备注, 避免坑到下一个人。

2 个赞

搞定了,想要了好久的功能了。谢谢大佬 :hugs: :hugs:

这个问题按照大佬的设置也解决了。但是不太明白为何开了这个选项 capture 就不生效?

谢谢两位大佬 @manateelazycat @kongds

两个想要许久的功能了,收获满满的一天。 :grinning:

1 个赞

重新用 text diff 序列算法替代 buffer-string 的方法, 这样可以实时搜索Emacs所有打开Buffer的单词, 又不会因为像前一版那样, 实时发送 buffer-string 增加Emacs的性能负担。

现在不管Emacs打开多大的文件, 文件的单词都是实时搜索的, 不会再有任何延迟, 也不会对Emacs性能有任何影响。

2 个赞

具体哪个命令,把出问题得命令粘贴一下吧,我大概知道啥问题。

在org的临时buffer开启lsp-bridge-mode (buffer-file-name)返回的是nil 会导致 file-exists-p的wrong-type-argument

导致问题的代码在这行lsp-bridge/lsp-bridge.el at d844a65c606d5d32b7945bd5ef6b3dd2c506f0dc · manateelazycat/lsp-bridge · GitHub

不过好像还会有另外的一些问题

大佬, jdtls 启动时提示 java 版本过低。

--- [06:02:52.991631] Send initialize request (33052) to 'jdtls' for project java
Traceback (most recent call last):
  File "/usr/bin/jdtls", line 17, in <module>
    jdtls.main(sys.argv[1:])
  File "/usr/share/java/jdtls/bin/jdtls.py", line 82, in main
    java_executable = get_java_executable(known_args.validate_java_version)
  File "/usr/share/java/jdtls/bin/jdtls.py", line 40, in get_java_executable
    raise Exception("jdtls requires at least Java 17")
Exception: jdtls requires at least Java 17

--- [06:02:53.088613] LSP server 'jdtls' exited with code 1
b''

可是我 java 版本如下:

❯ java -version                                                                                                                      ─╯
openjdk version "20" 2023-03-21
OpenJDK Runtime Environment (build 20+36-2344)
OpenJDK 64-Bit Server VM (build 20+36-2344, mixed mode, sharing)

是不是 emacs 用的 java 的版本与我的终端的不同?

自己看源代码, 看看是不是你设置 JAVA_HOME 有问题?

README 中有写 请确保导出 org.eclipse.jdt.ls.product/target/repository/bin 到你系统的 PATH 路径

遇到问题,先看一下 README 。