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

麻烦大佬看一下这个:

开启acm-enable-citre后,打开任意c++文件,*Message*报错:

Error in post-command-hook (lsp-bridge-monitor-post-command): (void-function citre-capf--get-collection)

1 个赞

中文版的文档是不是也要改一下啊

2022-12-04_12-32

请问原网址在哪里?

就在你回复的这层楼的上一层里。

EmacsConf2022的lsp-bridge演讲高清视频传YouTube了:https://youtu.be/vLdqcYafY8w

5 个赞

已经加到 README, 方便后面的人查阅。

晚上重构了一下 lsp-bridge, 加入了 search_list.py 这个模块, 写了一下“开发多线程异步后端”的文档, lsp-bridge/README.zh-CN.md at master · manateelazycat/lsp-bridge · GitHub

虽然 acm.el 已经把绝大多数补全后端都重写了, 但是难免大家有一些小众的补全需求又不会 Python 和多线程技术, 看上面的文档吧, 只用写写 elisp 就可以完全实现多线程的异步后端。

4 个赞

@manateelazycat 问一下想加载StarDict 词典,我需要将词典文件放到什么路径,

这个需要特殊配置一下吗,

我是 windows ,所以这个路径问题需要明确一下

你读了中文 README 了吗?

  • acm-backend-search-sdcv-words-dictionary: 用于单词补全的 StarDict 词典, 默认是 kdic-ec-11w, 可以自定义为其他 StarDict 词典, 如果你的系统存在词典 /usr/share/stardict/dic/stardict-oxford-gb-formated-2.4.2/oxford-gb-formated.ifo, 你需要设置这个选项为 /usr/share/stardict/dic/stardict-oxford-gb-formated-2.4.2/oxford-gb-formated, 不需要包括 .ifo 扩展

其中/usr/share/stardict/dic/ 我不知道怎么对应到 windows 上的路径

我只是举例子, 这个路径是你随便定义的, 没有啥限制。

路径下有多个字典是不是会自动加载?

只会加载一个

paredit 在升级后 paredit-mode-map 的优先级会比 acm-mode-map 高,导致不能用 <RET> 提交补全。

(package-initialize)
(require 'posframe)
(require 'markdown-mode)
(require 'lsp-bridge)
(global-lsp-bridge-mode)
(require 'paredit)
;;; paredit  20221127.1452 installed minor mode for editing parentheses
;;; lsp-bridge 49def460d6d14376d6c4dd6e16b84a05c0af6cbe

目前的解决方案是手动提升 acm-mode-map的优先级

(add-hook
   'paredit-mode-hook
   (lambda ()
     (make-local-variable 'minor-mode-overriding-map-alist)
     (push `(acm-mode . ,acm-mode-map) minor-mode-overriding-map-alist)))

但是不知道为什么 paredit-mode-map 优先级会比 acm-mode-map 高。

确实是这样,我想在acm-mode-map和lsp-bridge-mode-map下使用相同的快捷键,这样补全弹出来的时候使用acm快捷键,否则使用lsp-bridge的快捷键,但是不成功,acm-mode-map的优先级更低

修复了 4k 屏幕下, code-action 和 call-hierarchy 两个 frame 内的字体和Emacs的字体不一样大的bug, 4k屏幕的同学可以升级一下。

大佬, 来个补丁?

@twlz0ne 现在除了 lookup-doc, diagnostics, signature-help 外依然用 posframe, canddiate, candidate-doc, code-action, call-hierarchy 都已经全部切换到 acm-frame.el 模块了, 主要这后面几个模块有细致的交互操作, posframe.el 处理不是很方便, 全部代码都移动到 acm-frame.el 中, 变动比较大, 大佬看看 acm-terminal.el 是否挂了?

建议的移植策略:

  1. 代码补全: GUI/acm-frame, TUI:acm-terminal-overlay
  2. 代码文档: GUI/acm-frame, TUI:acm-temrinal-overlay
  3. 文档查看: GUI/posframe, TUI:acm-temrinal-overlay
  4. 诊断/API参数帮助: GUI/posframe, TUI:acm-temrinal-overlay
  5. Code Action: GUI/acm-frame, TUI:blink-sarch split-window
  6. Call-Hierarchy: GUI/acm-frame, TUI:blink-search split-window (blink-search 底部分开的窗口是双列设计)
1 个赞

我对 lsp-bridge 的未来构想是:

  1. acm-terminal.el 尽早合并到 lsp-bridge 仓库中, 同时 code-action/call-hierarchy 用 blink-search 的设计来做, 这样就很好的支持 code-action diff preview 的设计
  2. 写一个牛逼的远程文件同步模块, 不管GUI还是TUI都能很好的进行远程文件编辑, 解决 tramp 现在性能太弱的问题
  3. 让 lsp-bridge 支持远程部署, lsp server 和 lsp-bridge 的python部分部署到服务器上, 但是 acm/acm-terminal 保持在本地, lsp-bridge python 和 acm/acm-terminal 通过 WebSocket 进行通讯

通过这三个模块的结合, 用户不管 GUI 还是 TUI 都可以实现 VSCode 那样的远程代码的丝滑补全。

其中: 第一步短期可以实现, 第二步需要好好设计替代 tramp, 前两步实现了, 第三步把 lsp-bridge 连带 lsp server 都扔在远端后就水到渠成了。

lsp-bridge这样的设计天然可以扩展到远程代码编辑上, 以上只是设想, 个人精力太少了, 先贡献点子出来。

14 个赞