M-g g (a.k.a M-x goto-line) 行为怪异

M-g g (a.k.a M-x goto-line) acting weird

这里是 Emacs 新手(有点)。我从 goto-line 命令中得到了意外的行为。手册的措辞似乎不准确。我假设短语 "move to line LINE..." 的意思是 "set point to line LINE"。所以我对手册中关于goto-line的解释是,它应该在point的当前位置设置mark,然后将point移动到你输入的参数指定的行。这个对吗?因为发生的事情是,是的,它确实成功地在当前位置设置了标记(我不在乎,因为如果我愿意的话,我可以很容易地设置自己的标记)但是然后它在缓冲区而不是我指定的地方。这是 goto-line 应该做的吗?我是否误解了手册或此命令的用途?

我所从事的activity是阅读Emacs Lisp 手册并对其中的表达式求值。我在左边距中打开了行号,我希望能够简单地执行 M-g g LINE-NUMBER, C-e, C-x C-e 并查看表单的计算方式。但是相反,我必须执行这个笨拙的例程,即从目标行号中减去当前点行号,然后执行 M-DIFFERENCE C-n。或者我只是 C-nnnnnnn...或 C-pppppp...甚至使用鼠标,这是我试图通过使用 Emacs 摆脱的那种缓慢而笨拙的导航方式。

不幸的是,信息缓冲区中的 goto-line 正在处理源而不是呈现的结果。

(如果您访问 elisp.info 文件,您会看到实际行号的来源。)

不幸的是,这对您(或我怀疑的任何人)没有帮助,但它确实解释了为什么该功能无法按预期工作。

您可以 M-x report-emacs-bug 并建议将其更改为人们期望的工作方式。

如果您使用的是 Emacs 26 及其本机 display-line-numbers-mode 那么您可以自定义 display-line-numbers-widen 选项以防止在缓冲区变窄时更改行号,在这种情况下您将能够使用 goto-line.

可以看到的数字