display-line-numbers-mode的性能问题

听说最近的display-line-numbers很好用,但是实用下来感觉还是有性能上的问题。

不知道是只有我如此还是普遍现象,如果是用visual或relative的话,在翻页的时候能明显的感觉到要延迟,按理说相对行号不应该如此啊,不过即便是相对行号,也会计算整个buffer的行号。

各位用相对行号的都是怎么处理的呢。

个人使用中没有卡顿。最好有视频或者 git 说明下你是什么情况。

我觉得不应该叫卡顿,在一个大概200行以上的文件,在某个中间的位置,向上翻页M-v一次。关掉行号之后,重复这个操作,感觉上消耗的时间相同吗?

我这里能明显感觉开了行号的情况下会慢。

会不会是 gc 问题,试试调大gc-cons-threshold.

我用这代码试了下差20ms做右,30ms和50ms的区别。

(let ((time (current-time)))
  (call-interactively #'scroll-down-command)
  (message "%.06f" (float-time (time-since time))))

按理说20ms应该没啥大差别,不知道为什么总是感觉不太灵活。

其实,不用行号也挺舒服的(要是真感觉性能受不了,推荐一下不显示行号

我一直是不用的,但是感觉有相对行号有些操作会方便。比如说向下选10行。

这种事你可以先打一个 mark 然后 C-u 数字 C-n

我是超过10000行的org文件就不显示行号,prog-mode都显示,不管多少行。代码习惯显示行号,不然总觉得不爽。

(use-package display-line-numbers
  :ensure nil
  :hook (prog-mode . display-line-numbers-mode)
        (org-mode . albert-display-line-numbers)
  :init
  ;; 文件超过10000行,不显示行号,只留4位吧
  (setq display-line-numbers-width-start 4)

  (defun albert-display-line-numbers ()
    "org-mode的文件,如果行数<10000行就显示行号."
    (let ((num (line-number-at-pos (point-max))))
      (message "Opening %s, total lines: %d" (buffer-file-name) num)
      (if (< num 10000)
          (display-line-numbers-mode 1))))
  )
2 个赞

问题是没有行号看不出来有几行啊?你是说C-u的时候把行号切出来?

别说10000行,我感觉这个延迟在100行就可以感觉出来。

似乎还有其他因素,有时很慢,有时还行。

把major mode 改为 fundamental mode慢吗?

好像没有什么影响,体验差不多。还没有摸清啥情况下很慢。

我是说这种事应该让电脑帮你数。比如 C-u 10 C-n 就是下移 10 行。

我相信你理解错了

我的意思是说,没有相对行号,我怎么能一眼看出该是10行。

:rofl: 我不懂,可能是我理解错了,请无视吧

avy 直接跳到对应行就好了。

感觉一个数字带一个命令还是比avy那种单纯的移动好。

20毫秒按理说不应该感觉得到啊