emacs:将缓冲区内容评估为 s 表达式?

emacs: Evaluate buffer contents as an s-expression?

假设我有一个包含以下文本的 emacs 缓冲区:

'(1 2 3)

我想将此缓冲区的内容评估为 lisp 表达式(s 表达式)。如果我调用 (eval (buffer-string)),结果将简单地评估为以下字符串:

"'(1 2 3)"

我希望将结果作为 lisp 语句进行评估。在这个例子中,我希望结果是一个 3 元素列表,而不是一个字符串。

我还没有想出如何做到这一点。有什么想法吗?

非常感谢。

您可以使用 (eval-buffer) 评估整个缓冲区。 eval-buffer 不是解决此问题的方法,因为它总是 returns nil.

如果要遍历一个字符串,可以使用read-from-string。由于 return 既是它解析的内容,也是它停止解析的索引,作为一个 cons 单元格,您通常希望在其 return 值上调用 car

(eval (car (read-from-string (buffer-string))))