覆盖使emacs真的很慢

Toh*_*iko 5 emacs performance show-hide

我使用hide-show来折叠文本的某些部分,并使用下面的代码显示隐藏线的数量.

但是,当文件足够大(例如C++或LaTeX)并且我崩溃所有区域(从而创建了数十个叠加层)时,Emacs变得非常缓慢到无法使用的程度.即使将标记从一行移动到另一行也需要半秒钟左右.

有没有办法解决这个问题?

(defun display-code-line-counts (ov)
    (overlay-put ov 'display
                 (format "...%d..."
                         (count-lines (overlay-start ov)
                                      (overlay-end ov))
                         ))
    (overlay-put ov 'face '(:foreground "red" :box (:line-width 1 :style none)))
  )

(setq hs-set-up-overlay 'display-code-line-counts)
Run Code Online (Sandbox Code Playgroud)

编辑:原因是emacs变得非常慢是因为linum minor模式创建了数千个(隐藏)叠加层,这些叠加层与hide-show一起折叠.有没有办法来解决这个问题?还是更好的行号模式?

Dre*_*rew 3

正如您在标题中所说,覆盖会使 Emacs 变慢。

您可以做的一件事(有时会有所帮助)是将当前光标位置 ( ) 周围的覆盖集重新居中point。您可以使用 function 来做到这一点 overlay-recenter

正如 Elisp 手册中的管理叠加节点告诉您:

此函数将当前缓冲区的覆盖层置于位置的中心POS。这使得靠近 的位置的覆盖查找速度更快 POS,但远离 的位置的覆盖查找速度更慢POS

如果您先这样做,向前扫描缓冲区并创建覆盖的循环可以运行得更快(overlay-recenter (point-max))