emacs - 在命令行上评估 emacs lisp 表达式

标签 emacs elisp emacsclient

我是emacs的新手。我在 redhat linux 上使用 emacs-24.1,并试图评估一个 elisp 表达式。我希望 emacs 做的是在不启动 emacs 本身的情况下评估 elisp 表达式。我在尝试不同的东西

emacs --eval '(+ 2 3)'

我不知道 emacs 是否正在评估表达式,但结果未显示在控制台上,并且 emacs 窗口出现。接下来我尝试了这个
emacsclient --eval '(+ 2 3)'

Emacs 客户端需要一个服务器。它找不到服务器,因此引发错误(找不到套接字。启动服务器等)。所以我启动了一个服务器(服务器名称是 SERVER)并再次运行 emacsclient
emacsclient --server-file=SERVER -e '(+ 2 3)'

这一次,emacs 评估表达式并在控制台上打印结果。那是因为 emacs 正在使用现有的服务器来评估表达式。现在,当服务器未运行时,我遇到了问题。
emacsclient --server-file=ANOTHER_SERVER -e '(+ 2 3)' -a emacs

这一次,我在控制台上没有收到任何错误。 Emacs 正在启动一个新窗口,因为 -a(我的 .emacs 中有 (server-start) 命令,并且 server-name 设置为 ANOTHER_SERVER)。但是 emacs 正在尝试编辑文件 (+ 2 3)。它显示在模式行上。我很困惑。 emacsclient --help 向我展示了这个
-e, --eval              Evaluate the FILE arguments as ELisp expressions

和emacs手册说这个。
'-e'
'--eval'
Tell Emacs to evaluate some Emacs Lisp code, instead of visiting some files.
When this option is given, the arguments to emacsclient are interpreted as a
list of expressions to evaluate, not as a list of files to visit.

我不知道该怎么做。正如我所说,我的目标是在不启动 emacs 的情况下评估 elisp 表达式。是否可以?

最佳答案

经过一番测试,您似乎可以使用 --batch让 emacs 将任何消息转储到 stderr。然后您可以调用message将内容打印到 stderr,您可以在其中看到它们。您的示例将变为 emacs --batch --eval '(message (number-to-string (+ 2 3)))'结果将打印到标准错误。

如果您尝试将输出重定向到文件,则需要使用 2> 重定向 stderr 而不是 stdout而不仅仅是 > .

关于emacs - 在命令行上评估 emacs lisp 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474774/

相关文章:

emacs - 如何设置 Emacs 窗口的大小?

java - 有什么方法可以在 Vim/Emacs 中提供 Eclipse 自动错误发现功能?

emacs - 如何在 smartparens 中更改 sp-navigate-reindent-after-up 的值

Emacsclient 不响应鼠标点击

git - Emacs Magit 提交打开新的 Emacs 客户端

linux - 如何将emacsclient 背景设置为Emacs 背景?

emacs - windmove 是否支持 Emacs 中的环绕导航?

emacs - 设置 Emacs 并排分割缓冲区

emacs - 使用 Emacs 和 Tramp 通过网关到达远程主机

emacs - 如何在本地模式中取消设置 map 中的键绑定(bind)?