覆盖使emacs真的很慢

时间:2017-02-03 12:03:25

标签: performance emacs 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)

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

1 个答案:

答案 0 :(得分:3)

正如你在标题中所说,叠加可以使Emacs变慢。

有时你可以做的一件事就是在当前的光标位置(point)周围重新设置一组叠加层。你这样做是使用功能 的 overlay-recenter

作为Elisp手册,节点Managing Overlays告诉您:

  

此功能重新定位当前缓冲区的叠加层        位置POS。这使得近距离位置的叠加查找更快        POS,但远离POS的位置较慢。

     

可以运行一个向前扫描缓冲区,创建叠加层的循环   如果你先(overlay-recenter (point-max)),请加快速度。