12

私は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

今回は、コンソールでエラーが発生していません。-a (私の.emacsには(server-start)コマンドがあり、サーバー名はANOTHER_SERVERに設定されています)ため、Emacsは新しいウィンドウを起動しています。しかし、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 式を評価することです。出来ますか?

4

2 に答える 2

11

少しテストした後、--batchemacsにメッセージをstderrにダンプさせるために使用できるようです。次に、messageそれらを見ることができるstderrに物事を印刷するために呼び出すことができます。あなたの例はになりemacs --batch --eval '(message (number-to-string (+ 2 3)))'、結果はstderrに出力されます。

出力をファイルにリダイレクトしようとしている場合は、.の代わりにを使用して、stdoutの代わりにstderrをリダイレクトする必要があり2>ます>

于 2012-07-13T17:02:10.113 に答える
7

試す

emacs --batch --eval '(print (+ 2 3))'
于 2012-07-13T17:16:12.840 に答える