@happyo 方案一我已经实现了, 上面的补丁是重写了整个 TabNine 后端, 只保留原来 Elisp 安装 TabNine 的代码。
原来 Elisp 的实现是在 Elisp 端等 TabNine 进程的计算结果, 一旦 TabNine 计算时间超过 100ms 就会导致补全前端卡顿, 原来的实现已经全部删除, 新的实现用类似 lsp-bridge 的技术, 和 TabNine 通信的代码用 Python 多线程来实现。
我现在实验的效果是,不管 TabNine 占用CPU多高, Emacs 和 lsp-bridge 都丝滑流畅, TabNine 的体验性能现在和 VSCode 一致了。
3 个赞
基于新版的 TabNine 后端实现, TabNine 补全都非常流畅了, 现在只要安装了 TabNine 默认就开启 TabNine 功能, 非常好用。
不喜欢 TabNine 的可以用 (setq acm-enable-tabnine-helper nil)
来关闭。
我发现 Python 来写 IPC 通讯要比 elisp 快很多, 代码清晰同时代码量会少很多。
happyo
2176
是的,我看代码简洁了很多,另外这个需要安装下orjson库,可以在文档上标注下。
我发现 orjson 的必须依赖被 LSP auto-import 功能自动引入了
这个补丁已经修复了, orjson 重新变成可选的, 装了更快。
omnisharp不反回补全项,是因为要用mono Omnisharp.exe 这样的方式启动(就挺奇怪的。。。。 看了vscode 的c#插件才发现的)。
就是Omnisharp 不会主动推送diagnostic, 语法检查似乎用不了
启动命令的话,这个参数估计不能写在json 里面。这个是OmniSharp的安装目录来着。
等我得空我写个安装命令吧,直接固定目录好了。然后我再发补丁。
lsp-bridge支持不同操作系统不同配置,只要路径固定都可以写。
在 Windows 中启用 Tabnine 补全可能会遇到问题,emacs 中调用 tabnine-bridge-install-binary
会下载文件到 emacs
的 HOME
目录,而 lsp-bridge
python 代码调用 TABNINE_BINARIES_FOLDER = os.path.expanduser("~/.TabNine/")
中的 ~
是指代 C:/Users/XXX
,和 emacs
的 HOME
通常不一致,会找不到下载的 Tabnine
。可以通过移动文件或者设置 tabnine-bridge-binaries-folder
解决。
能力有限,不会用代码优化,供各位大佬参考。
一直以来使用doomemacs,早就想用lsp-bridge了,但是因为需要用到很多的 completion backend,因此还是需要用 capf 的,所以一直没有上船。但是近来一直追踪项目的更新动态,现在 lsp-bridge 已经支持 citre backend,甚至支持输入法后端,以及已经支持多 lsp 了,这也给了我切换的动力。
如果有小伙伴使用 doomemacs,打算更换到 lsp-bridge的话,可以试下如下操作:
- 把 init.el 里有关 lsp 的内容全部注释掉。
- 在 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"))
- 在 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 个赞