1

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

'(1 2 3)

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

"'(1 2 3)"

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

我还没有弄清楚如何做到这一点。有任何想法吗?

非常感谢。

4

1 回答 1

2

您可以使用(eval-buffer)来评估整个缓冲区。 eval-buffer不是解决方案,因为它总是返回nil.

如果要遍历字符串,可以使用read-from-string. 由于它返回了它解析的内容和它停止解析的索引,作为一个 cons 单元,您通常希望调用car它的返回值:

(eval (car (read-from-string (buffer-string))))
于 2016-11-29T16:17:13.720 回答