Emacs 或将支持原生地显示行号(绝对和相对)

Eli Zaretskii 给 Emacs 添加了原生的显示行号(包括绝对和相对行号)的功能:

这是在 C 层面实现的,会比目前的 Lisp 的方案效率要高。


我试了下,只能能确认它是正常工作的,但我原本就没有用过显示行号的插件,所以没什么别的感受。

绝对行号:

相对行号:

2 个赞

linum 有个瑕疵,就是切换窗口以后行号就不正常,重装聚焦窗口以后才会恢复。


为什么相对行号 当前行是 0 而不是 当前行号?

1 个赞

相对行号在跳转的时候会比较有用。 比如g 1(evil) 就标识往下一行,相信行号从0开始也是基于这样的方便考虑

我就是用的相对行号。linum 当前行号会高亮,所以当前行号会显示行号,而不是0。

有人已经提出来了:

For Relative Numbers, a feature request would be to have the current line represent the current line number instead of 0. I think vim 8 does that for relative numbers.

看了看邮件列表,发现回复里面不少不用相对行号的人。

这么一说,看起来这个内置行号还不支持高亮。

Is it really important? Why? do people really have difficulty finding the line where point/cursor is?

I could add this feature if it’s deemed important, but it will slow down redisplay to some extent, because cursor motion can no longer be considered affecting the cursor alone.

看起来作者也不愿意加高亮。

似乎已经merge 到master 分支了

;; (setq display-line-numbers-current-absolute t)
(defun vmacs-change-line-number-abs()
  (setq display-line-numbers 'absolute))

(defun vmacs-change-line-number-relative()
  (setq display-line-numbers 'visual))


(add-hook 'evil-insert-state-entry-hook 'vmacs-change-line-number-abs)
(add-hook 'evil-normal-state-entry-hook 'vmacs-change-line-number-relative)
(add-hook 'evil-motion-state-entry-hook 'vmacs-change-line-number-relative)

我不用相对行号。

原生行号如果失掉了可定制性,高亮就变很慢,那还不如 linum。其实我也不是很在意高亮,当然有最好。

我更喜欢用行号来干点别的事情,比如:

widen 状态下,行号跟内容之间用空格区隔

1 (defun foo()
2   )
3 (defun bar()
4   )

narrow 状态下,行号跟内容之间用竖线区隔

1|(defun foo()
2|  )

还试过在行号栏显示文件 diff 状态(终端下没有 fringe :cry:),因为太慢放弃了。

看了一下emacs devel上此功能相关讨论, 感觉emacs的渲染引擎局限性挺多啊, 这个行号没有自己专门的区域, 是文本区的一部分, 跟文本区内容一起渲染的.

昨天试了一下emacs的master, 打开xdisp.c跳转到尾部, 然后一直按向上键, 会有很多次明显的卡顿. 25.2几乎感觉不到卡顿.可能是新版cc-mode的问题, 也可能是新版emacs的问题.

曾经 Vim 上各种相对行号、绝对行号用的多嗨皮。 结果跑到 emacs 下一看,竟然没有! 幸好是从 spacemacs 配置直接开始的,要不然能吐血数升……