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

。。。我发现我用emacs编辑.el文件的时候会有提示

什么叫路径别名?

注释掉 yasnippet 的相关代码后 clangd 返回的 ${0:header} 就可以正常工作了。

   (yas--place-overlays snippet field)
   (overlay-put yas--active-field-overlay 'yas--snippet snippet)
   (overlay-put yas--active-field-overlay 'yas--field field)
+  ;; make this field active
+  (setf (yas--snippet-active-field snippet) field)
   (let ((number (yas--field-number field)))
-    ;; check for the special ${0: ...} field
-    (if (and number (zerop number))
-        (progn
-          (set-mark (yas--field-end field))
-          (setf (yas--snippet-force-exit snippet)
-                (or (yas--field-transform field)
-                    t)))
-      ;; make this field active
-      (setf (yas--snippet-active-field snippet) field)
+    (unless (and number (zerop number))
       ;; primary field transform: first call to snippet transform
       (unless (yas--field-modified-p field)
         (if (yas--field-update-display field)
1 个赞

好像不是那个问题,有时候还是可以连过去的,抱歉

yasnippet 好像没人修了啊。我最近拿 tampel 也整了个可以补全 lsp snippet 的函数,但是后来发现对于 clangd,特别容易把 server 搞挂,报错那个

trying to get preamble for non-added document

看 clangd, 好像得到了个 range length 不匹配的错误。不知道是不是 tempel 的问题,最近没空深入研究。

1 个赞

方便贴出来借鉴下么 :face_with_peeking_eye:

晚上推送了一个新的补丁 Add new option lsp-bridge-get-project-path-by-filepath . · manateelazycat/lsp-bridge@7ee5ea0 · GitHub

主要增加了新的选项 lsp-bridge-get-project-path-by-filepath

更新后, lsp-bridge 有三种扫描模式:

  1. 检测到 .git 目录时(通过命令 git rev-parse --is-inside-work-tree 来判断), lsp-bridge会扫描整个目录文件来提供补全
  2. 没有检测到 .git 目录时, lsp-bridge只会对打开的文件提供单文件补全
  3. 自定义 lsp-bridge-get-project-path-by-filepath 函数, 输入参数是打开文件的路径字符串, 输出参数是项目目录路径, lsp-bridge会根据输出目录路径来提供补全
3 个赞

新的 acm 依然闪烁,我估计是这两个地方:

这也是 Emacs 本身的问题,无法实现双缓冲内存绘制的效果。所以每次刷新都能明显感觉到 childframe 的「收缩→填充」过程,比终端 overlay 还严重。

试过把 (erase-buffer) (...) 这两句换成 (replace-buffer-contents ...) 依然会闪烁,因为 replace-buffer-contents 的 C 实现也是先删除再插入。

我本地 hack get_project_path 很久了,正需要这功能,大赞~

顺便贴一段配置给和我一样用了 monorepo 的人参考吧:

(setq lsp-bridge-get-project-path-by-filepath
      (lambda (filepath)
        (save-match-data
          (and (string-match "/path/to/your/monorepo/\\([^/]*\\)" filepath)
               (match-string 0 filepath)))))

emacs -Q 对比测试下?

就是用 emacs -Q 测试。可能我电脑比较慢,使得闪烁更明显。

当主题自动切换后,acm 的背景色不会自动切换。

大佬们是咱中国的EMACS之光啊!光浏览lsp-bridge 和EAF 会话就能感受大佬们的期待和热情!赞👍

欢迎发送补丁

我目前没有感受到闪烁,可能我电脑性能比较好的原因吧

我用 QuickTime 录了几秒视频,尽量匀速按键:https://i.imgur.com/hKQScdS.mp4

可以看到当下拉菜单内容发生变化时,闪烁比较明显(经过 QuickTime 的抽样已减弱了一些)。上下翻动选项的时候,文档 frame 也会有跳动感。

acm 目前是内容更新以后才会调用 fit-frame-to-buffer-1 更改 childframe 的大小的, 按道理不应该闪烁啊, 你有机会找一个稍微快一点的电脑对比看看?

你机器啥配置,我公司17年的垃圾 mbp 好像也没有闪烁

懒猫大佬,你那个lsp-bridge的架构图是用google docs画的吗,为啥我的google docs找不到画好看的架构图的地方?