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))))
假设我有一个包含以下文本的 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))))