2

Я запустил следующую команду из командной строки, ожидая получить 5 (результат выражения), но вместо этого я получил сообщение об ошибке «функция символа не определена».

emacs -e "(+ 2 3)"

Итак, что я сделал не так? Как правильно быстро оценить выражение, не открывая emacs?

Спасибо

2 ответа2

4

То, что вам нужно, это пакетный режим Emacs, который инструктирует Emacs выполнить данную программу на Лиспе (заданную с помощью -l FILE , -f FUNCTION или --eval FORM) и затем выйти. Из Справочного руководства по GNU Emacs Lisp:

Параметр командной строки '-batch' заставляет Emacs работать неинтерактивно. В этом режиме Emacs не читает команды с терминала, он не изменяет режимы терминала и не ожидает вывода на стираемый экран. Идея состоит в том, что вы указываете программы на Лиспе для запуска; когда они закончат, Emacs должен выйти. Способ указать программы для запуска - с помощью '-l file', который загружает библиотеку с именем file, или '-f function', которая вызывает функцию без аргументов, или '--eval form'.

Любой вывод программы на Лиспе, который обычно отправляется в область эха, либо с использованием сообщения, либо с использованием 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, то синтаксис для параметра командной строки, который оценивает пол:(из руководства Emacs, Action Arguments узла):

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

То есть вы можете использовать --eval=... или --execute=... AFAIK, вы не можете использовать -e...

Однако вы можете использовать -e... (или --eval) с emacsclient . Например: emacsclient -e (text-mode)

(Лучше всего указать точное сообщение об ошибке, которое вы получаете, а также версию Emacs, чтобы получить наибольшую помощь.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .