本来正常用就100+mb内存占用,但是随便打开两个几百kb的文件kill-ring-save全部内容,例如markdown-mode.el rust-mode.el,然后yank-pop上下移动选择内容,就会明显卡顿,然后内存占用飙升到800+mb。有什么办法缓解一下吗,复制东西稍微多一点yank-pop就卡顿的难受,有点怀疑是yank-pop选择的内容全都在一行显示导致的。 看起来是 vertico 这个插件的问题。
我用counsel/ivy的类似功能没有这样的性能问题.
请问楼主, 这个分析性能占用的是什么插件?
我用的 Emacs 30.0.50 + vertico(README formatting · minad/vertico@c87e73e · GitHub) 试了下,内存没有升到那么高,只是从 180 M → 230 M. 不过 consult-yank-pop
时 C-n/C-p 移动光标就比较卡了。
update: vertico 上游已经修复
的确是 vertico 的问题:在 vertico–truncate-multiline 中会把候选项切割到 minibuffer 的宽度,但是它直接在 candidate 上做正则替换(而且是好几次),所以就很慢。
下面这个 advice 可以解决之:提前把字符串切割到不超过 max-width 2 倍的长度。
(defun vertico--truncate-multiline-advice-limit-input-length (oldfun cand max-width &rest _)
(funcall oldfun (substring cand 0 (min (length cand) (* 2 max-width))) max-width))
(advice-add 'vertico--truncate-multiline :around #'vertico--truncate-multiline-advice-limit-input-length)
(btw 我试过用 truncate-string-to-width 了,但是性能比 substring 差很多。)
3 个赞
确实解决了问题。大佬可以给 vertico 提个 PR 啊
宝你真棒棒棒棒棒棒
我也是, 用 counsel 就很快