【问题标题】:emacs: Evaluate buffer contents as an s-expression?emacs:将缓冲区内容评估为 s 表达式?
【发布时间】:2017-04-13 17:23:18
【问题描述】:

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

'(1 2 3)

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

"'(1 2 3)"

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

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

非常感谢。

【问题讨论】:

    标签: emacs buffer eval s-expression


    【解决方案1】:

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

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

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

    【讨论】:

    • (eval-buffer) 返回 nil,所以我不能用它来返回缓冲区中表达式的值。但是, (eval (car (read-from-string (buffer-string)))) 确实有效。我忘记了从字符串读取。谢谢!
    • 啊,应该在回答之前测试一下:)
    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多