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

等我得空我写个安装命令吧,直接固定目录好了。然后我再发补丁。

lsp-bridge支持不同操作系统不同配置,只要路径固定都可以写。

在 Windows 中启用 Tabnine 补全可能会遇到问题,emacs 中调用 tabnine-bridge-install-binary 会下载文件到 emacsHOME 目录,而 lsp-bridge python 代码调用 TABNINE_BINARIES_FOLDER = os.path.expanduser("~/.TabNine/") 中的 ~ 是指代 C:/Users/XXX,和 emacsHOME 通常不一致,会找不到下载的 Tabnine。可以通过移动文件或者设置 tabnine-bridge-binaries-folder 解决。 能力有限,不会用代码优化,供各位大佬参考。

一直以来使用doomemacs,早就想用lsp-bridge了,但是因为需要用到很多的 completion backend,因此还是需要用 capf 的,所以一直没有上船。但是近来一直追踪项目的更新动态,现在 lsp-bridge 已经支持 citre backend,甚至支持输入法后端,以及已经支持多 lsp 了,这也给了我切换的动力。

如果有小伙伴使用 doomemacs,打算更换到 lsp-bridge的话,可以试下如下操作:

  1. 把 init.el 里有关 lsp 的内容全部注释掉。
  2. 在 package.el 里添加如下的段落,如果同时需要使用 acm-terminal 的话还需要非常丑陋的操作 (搞不懂 straight 这个包到底咋用,十分莫名其妙)
(package! lsp-bridge :recipe (:host github :repo "manateelazycat/lsp-bridge" :files ("*")))
(package! acm :recipe (:host github :repo "manateelazycat/lsp-bridge" :files ("acm")))
;; 如果没有上面这一行,安装 acm-terminal 的时候 doom sync 会报错,提示找不到 acm 这个包,不装 acm-terminal 不需要这奇怪的一行
(package! popon)
(package! acm-terminal :recipe (:host github :repo "twlz0ne/acm-terminal"))
  1. 在 config.el 里添加如下的段落
(customize-set-variable 'company-global-modes
                        (append company-global-modes '(python-mode)))

(use-package! lsp-bridge
  :hook
  (python-mode . lsp-bridge-mode)
  :init
  (setq acm-enable-citre t))

(unless (display-graphic-p)
  (after! acm
    (use-package! acm-terminal)))

暂时还没打算全局换成 acm,对于没补全性能要求的文件编辑,使用 capf 似乎是更好的选择。

7 个赞

Windows 下 (file-name-as-directory "~/.TabNine") 返回的是啥?

“~/.TabNine”

windows 中

  1. 如果设置了环境变量 HOME ,那么就用它的值作为 HOME 目录
  2. 如果存在注册表键值 HKCU\SOFTWARE\GNU\Emacs\HOME ,就用它的值作为HOME目录
  3. 如果存在注册表键值 HKLM\SOFTWARE\GNU\Emacs\HOME ,就用它的值作为HOME目录(和2的区别是,2只是针对当前用户的注册表路径,3则是针对所有用户)。如果存在 C:\.emacs ,就用 C:\ 作为HOME目录~
  4. 如果以上都不存在的话,就使用 C:\Users\<user name>\AppData\Roaming 作为HOME目录

command 里面的环境变量不会自动展开,我目前在LspServer那边给omnisharp特殊处理了。不过有点怪怪的,有什么更好的办法吗。

就这样做吧,以后有好方法再提升。

目前看没有太好的办法。

代码写到 lsp-bridge/lspserver.py at 6c5f30e58f1bc9c8cbfbc5dfe5aeaf0bb3cb3c48 · manateelazycat/lsp-bridge · GitHub 这附近吧

send_initialize_request 应该在服务器启动之后吧?这个时候再改启动参数应该没用了吧。

你先按照你的补丁来写吧,写好我再改一下。

好,紫薯布丁

布丁已发,大佬查收

已经合并了。

语法检查可以用的,只不过有点慢 :rofl: 刚多等了一下,他就出来了。

懒猫你有在用 lsp bridge 的 code format 吗?最近用起来,发现一个问题,我仿佛记得 lsp bridge 的 code format 是会对 buffer 和文件都有操作,tree-sitter 有一个 tree-sitter-hl-mode 用来高亮 buffer 的,配合着使用,就会出现下面这样的上色问题:

image

我在 Emacs -Q 试过了,用下面这个配置,打开 tree-sitter-hl-modelsp-bridge-mode,在一个 Go 文件里,进行一些操作后,不保存等 lsp bridge code format 几次就会出现。

 (use-package lsp-bridge
   :commands lsp-bridge-mode
   :load-path ""
   :ensure nil
   :init
   (use-package yasnippet)
   (use-package markdown-mode)
   (use-package posframe)

   :config
   (setq lsp-bridge-enable-auto-format-code t)

   (yas-global-mode)
   (global-lsp-bridge-mode))

 (use-package tree-sitter
   :init
   (use-package tree-sitter-langs)
   :config
   (global-tree-sitter-mode)
   (add-hook 'prog-mode-hook #'tree-sitter-hl-mode))

是tree sitter那个插件的问题,对buffer进行大量行改动操作就会这样。

那还treesitter的bug,有时候编辑范围比较大,颜色也会没有。

我感觉也是 tree sitter 的问题,一直等不到 tree sitter 更新🤣,看来只能先把 tree sitter 关了

elisp treesitter还并不成熟。而且似乎有另外的人在做将 treesitter 写入 core 的工作了。如果这个被 merge 了,感觉elisp treesitter 的维护动力可能就更弱了。 另外一点就是 elisp treesitter 因为很多syntax 的关键词都使用了自己的关键词,而不是常见的关键词,导致 treesitter 的 parser很多都要自己写,导致没办法直接用很多成熟的工作。比如neovim对treesitter的整合度就很高,有大量现成的parser,helix(另一个模态编辑器)甚至直接把neovim的treesitter parser直接拿过来就用,都没有任何问题

2 个赞