评估 Lisp 表达式

评估 Lisp 表达式

我从命令行运行以下命令,希望获得5(表达式的结果),但却收到一些关于“符号的功能未定义”的错误消息。

emacs -e "(+ 2 3)"

那么,我做错了什么?无需真正打开 emacs 即可快速评估表达式的正确方法是什么?

谢谢

答案1

你正在寻找的是 Emacs 的批处理模式,它指示 Emacs 执行给定的 Lisp 程序(无论是由-l FILE-f FUNCTION还是给出--eval FORM),然后退出。从GNU Emacs Lisp 参考手册

命令行选项“-batch”使 Emacs 以非交互方式运行。在此模式下,Emacs 不会从终端读取命令,不会改变终端模式,也不会输出到可擦除的屏幕。这个想法是,您指定要运行的 Lisp 程序;当它们完成后,Emacs 应该退出。指定要运行的程序的方法是使用“-l file”,它加载名为 file 的库,或使用“-f function”,它调用功能没有参数,或者‘--eval form’。

任何 Lisp 程序输出,无论是使用 message 还是使用 prin1 等,以 t 作为流,通常都会进入回显区域,但在批处理模式下,它们会进入 Emacs 的标准错误描述符。同样,通常来自迷你缓冲区的输入是从标准输入描述符读取的。因此,Emacs 的行为很像非交互式应用程序。(Emacs 本身通常生成的回显区域输出(如命令回显)被完全抑制。)

举一个简单的例子:

me@host $ emacs -batch --eval '(message (format "1+2 equals %d" (+ 1 2)))'
1+2 equals 3
me@host $ 

答案2

如果您使用的是 GNU Emacs,那么评估 sexp 的命令行选项的语法如下(来自 Emacs 手册,node Action Arguments):

`--eval=EXPRESSION'
`--execute=EXPRESSION'
     Evaluate Lisp expression EXPRESSION.

也就是说,您可以使用--eval=...--execute=...。据我所知,你不能使用-e...

但是,你可以将-e...(或--eval) 与 一起使用emacsclient。例如:emacsclient -e (text-mode)

(最好指定您收到的确切错误消息以及您的 Emacs 版本,以获得最多的帮助。)

相关内容