,好的 ,感谢感谢,调试好痛苦!起码有点眉目了!
我看了一下, 主要是 dwm.c 这个文件手动格式化的时候就会触发几千行的缩进变化, 一瞬间修改几千行会触发Emacs进行GC操作, 导致Emacs卡顿。
Elisp真的是一个非常脆弱的语言。
抱歉,刚刚看到消息
我确实换了较旧的 clojure-lsp, 貌似 clojure-lsp-native 还没有提供格式化功能,所以用 clojure-lsp 也就接受了。
这个补丁在格式化之前, 临时把 inhibit-modification-hooks
设置成 t
, 避免一瞬间格式化上千行引起Emacs的GC介入。
同时这个补丁避免每修改一行就像 LSP 服务器发送一个 textDocument/didChange
提醒, 而是全部格式化完成以后, 保存文件后, 让服务器重新读取新的文件, 以此来避免格式化几千行的瞬间发送几千个请求给 LSP Server。
我测试的 dwm.c , 不再会因为几千行一瞬间修改卡顿了。
换成旧的 clojure-lsp , 补全就没问题是吧?
是的
旧的 clojure-lsp 补全正常,
新的 clojure-lsp-native, 补全 keyword 会添加额外的 :
,例如 :ab|
触发 :abc
补全得到的是 ::abc
,怀疑是补全时删除了 ab
没有删除 :
,所以才有上述对 acm-backend-lsp.el
的修改尝试
那是新的还是旧的功能全呢?
clojure-lsp 官方确实建议使用 clojure-lsp-native , lsp-mode 使用的也是 clojure-lsp-native
又确认了下 clojure-lsp-native 应该支持 format,但是前几天用的时候提示没有 format 功能,现在想想会不会是接口有变化,所以 lsp-bridge 没有调用到?
要看一看 clojure-lsp-native 初始化的参数是怎么返回的。
这个补丁已经修复了, 可以直接安装 clojure-lsp-native 了。
最新的 clojure-lsp-native 支持 format, lsp-bridge也可以正常调用 format 功能。
太快了吧
已经标注最低Emacs 28, 感谢建议。
安装 clojure-lsp-native 花了一点时间, 日志打印出来后原因很快就找到了。
今天研究了一下 volar , 删除边界要更小心处理:
- 删除开始的位置要在
菜单弹出位置
和range-start
之间找更小的那个值 - 删除末尾的位置要在
当前光标位置
和range-end
之间找更大的那个值
只有把这四种情况都考虑进去后, volar/vue 的 插入替换
操作才能完全正确, vue补全时偶尔会发生插入额外字符的同学可以更新一下。
volar 真的是 LSP 协议测试最佳服务器。
卧槽,上次我提的问题被这个更新解决了,我希望您还是创建一个测试组,让测试组的人来测试各位反馈的问题吧
你负责给测试组的人发工资吗?
为啥你说话总是命令口吻?另外建议说话少一些 不那么文明的用词,比如 “卧槽”。
我希望您还是自己深入学习一下emacs-lisp和python,然后调试自己和其他人遇到的问题吧。
有些人总是认为其他人应该无偿的为他服务,把自己伸手动嘴和别人付出当做理所当然。
不用理吧,我已经把他屏蔽了,多次不尊重人的沟通,我不想和他沟通了。
论坛就是大家相互交流学习的地方,他却把我当做免费开发,眼不见心不烦。