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

目录找最快, yas 那些 table 不知道干了啥,查一次好慢。

这个灰色预览,我这边好像没有,emacs -Q 也不行,这个是去掉了吗

装了,yasnippet 和 yasnippet-snippets都装了

去掉了,容易产生bug, 性能和稳定性最重要。

这个是我的yas/root-directory

你这路径第一个肯定没什么 snippet。他默认只扫描了第一个。

是的,这个目录是用来放自定义的snippet的。后面那个yasnippet-snippets-dir才是yasnippet-snippets提供的snippets的路径

但是这个好像yasnippet 的默认配置吧

想直接软连接到第一个目录下面,但是第一个目录又有一些我自己的snippets :joy:

我是用变量指定自己的 snippets 目录,而且可以指定多个,实测有效。

(setq yas-snippet-dirs '("~/.emacs.d/snippets/blove-snippets" "~/.emacs.d/snippets/yas-snippets"))

更新吧,已经好了。

1 个赞

今天把英文单词后端集成到 lsp-bridge 中,任何时候想写英文文档的时候, 调用 lsp-bridge-toggle-english-helper 命令即可。

lsp-bridge 现在已经支持LSP、Elisp、Dabbrev、Yasnippet、Filepath和English 六种后端自动混合显示,优先级如下:

  1. 探测到当前是文件路径,菜单全部换成文件列表补全
  2. 如果是 Elisp mode, 会用 Elisp + Yas 后端补全
  3. 如果是 lsp-bridge mode, 会用 LSP + Yas 后端补全
  4. 手指头松开1秒中,补充 dabbrev 后端数据(dabbrev 后端默认是关闭的)
  5. 调用 lsp-bridge-toggle-english-helper 命令快速切换英文单词补全

日常编程和写文档所需的补全功能, lsp-bridge都已帮你默认配置好,开箱即用,大家再也不用浪费大量时间去配置Emacs的补全功能了。

11 个赞

这个 yasnippet-snippets 包真是奇葩,他加了一个 'yasnippet-snippets-dir 到 yas/root-directory 中,循环枚举文件都枚举不到。

yasnippet 的代码写的太复杂了,打开文件的时候就会浪费1秒启动时间。

等明年我有空的时候,我写一个新的模板引擎吧(主要解决 yasnippet 现在启动慢和模板跳转太脆弱的问题),今年 lsp-bridge 的任务已经完成了。

13 个赞

yasnippet启动jit后,可以用(yas--get-snippet-tables),不用lsp-bridge去读取yas/root-dir下的文件

(defun company-yasnippet--candidates (prefix)
  ;; Process the prefixes in reverse: unlike Yasnippet, we look for prefix
  ;; matches, so the longest prefix with any matches should be the most useful.
  (cl-loop with tables = (yas--get-snippet-tables)
           for key-prefix in (company-yasnippet--key-prefixes)
           ;; Only consider keys at least as long as the symbol at point.
           when (>= (length key-prefix) (length prefix))
           thereis (company-yasnippet--completions-for-prefix prefix
                                                              key-prefix
                                                              tables)))

我知道这个函数,但是它太慢了,卡手。

Hi, 我在 *scratch* buffer 里 lsp-bridge 没法补全,在文件比如test.el 里是可以的

尝试将 *scratch*的mode改成 emacs-lisp-mode 也没用

lsp-bridge 的 commit 是 0f9e43b106dd28b096c55553695ab438c6fb192f

环境是 MacOS M1

这是我的最小配置

(add-to-list 'load-path "~/.emacs.d/site-lisp/lsp-bridge")
(add-to-list 'load-path "~/.emacs.d/site-lisp/yasnippet")
(require 'yasnippet)
(require 'lsp-bridge)
(yas-global-mode)
(global-lsp-bridge-mode)

这个 buffer 的 major-mode 是啥?

lisp-interaction-mode

改成 emacs-lisp-mode 也不行

看到了Message里有打印

[LSP-Bridge] cannot be enabled in non-file buffers.

但 elisp 补全应该是不需要 file