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

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

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


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

绝对行号:

相对行号:

3 个赞

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


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

1 个赞

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

1 个赞

我就是用的相对行号。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.

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

1 个赞

似乎已经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 配置直接开始的,要不然能吐血数升……