在Emacs中将行号设置为变量

10

我正在尝试在Elisp中将当前行号设置为变量,但一直收到void-variable错误!

代码如下:

(setq x what-line)

我还想将缓冲区中的总行数设置为一个变量,但是也收到了相同的错误?!


3
这只是一个语法错误。将what-line用括号括起来,因为它是一个函数而不是变量。 - viam0Zah
(what-line) 返回的是 Line 96 而不仅仅是 96,因此非常适合在 minibuffer 中显示。 - Peter.O
3个回答

16
(setq x (line-number-at-pos)
      y (line-number-at-pos (point-max)))

如何找到这种东西的信息?尝试使用 M-x find-function RET what-line RET 查看 what-line 的源代码。阅读定义 what-line 的文件 simple.el 是熟悉基本Elisp编程的好方法。


2
根据您的Emacs版本,此函数可能不可用。您可以使用以下代码片段来近似实现它:(1+ (count-lines 1 (point))) - tyree731

3
(setq x (what-line))

1
这对于显示很好,但不适用于纯数字。它输出“第54行”.. 对于我有时想要的东西非常棒,所以加1。谢谢。 - Peter.O

2

前面的回答中提到的line-number-at-pos函数只考虑缓冲区的可访问部分。如果缓冲区被"narrowed",它将不会计算隐藏的行数,因此可能会令人困惑。

如果你阅读what-line函数的代码,你就可以看到它如何处理被缩小的缓冲区(实际上,what-line通过调用line-number-at-pos函数来工作)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接