我有一个简单的elisp脚本,我想用emacs运行。
(defun add-numbers (a b)
(+ a b))
(add-numbers 2 3)
或者,我可以转到ielm
模式并定义一次该函数,然后从ELSIP
控制台调用。
我需要一种简单执行脚本的方法。我觉得有一些关键可以让它执行,很可能是c-x c-e
但不能使它工作。
我在C-x C-e
上遇到以下错误,但它似乎是一种奇怪的调试器模式。
Debugger entered--Lisp error: (void-variable a)
eval(a nil)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
答案 0 :(得分:3)
我建议您尝试Color
到rtfm。
由于您的光标(emacs术语中的“点”)位于符号C-h k C-x C-e
之后,因此最后一个表达式为a
。
由于变量a
未绑定,尝试对其进行评估会生成消息a
。
如果你真的想使用error: (void-variable a)
,你应该在括号后点击C-x C-e
调用并点击defun
,然后在第二个表达式之后移动点并再次输入{ {1}}。
如果你想“执行脚本”(在emacs术语中,我们会说“评估缓冲区”),你应该输入C-x C-e
或C-x C-e
。
在这种情况下,缓冲区中包含的所有表达式都会被计算,但是没有可见的输出:在你的情况下,解释器将评估M-x eval-buffer RET
,它将定义函数Menu > Evaluate buffer
(没有输出)。然后解释器将评估计算并返回(defun add-numbers (a b) (+ a b))
的表达式add-numbers
,但这不会产生任何输出。
尝试输入您的文件
(add-numbers 2 3)
再次和5
。您应该在迷你缓冲区(message "result of %s is %d" '(add-numbers 2 3) (add-numbers 2 3))
中收到消息。
如果您在缓冲区中放置了多个M-x eval-buffer RET
,则可以使用快捷方式result of (add-numbers 2 3) is 5
(或message
)查看所有C-h e
。
答案 1 :(得分:1)
您需要eval-defun
,通常为C-M-x
。尽管它的名字,它的作用是寻找当前的顶级形式并对其进行评估。 '电流'是以某种方式定义的,因此它符合您的期望。
答案 2 :(得分:0)
您可以在功能代码中的某处使用C-M-x和指针(光标),或者您可以使用C-x C-e,但指针位于函数末尾。
这意味着,将指针放在函数定义的最后一个右括号后面,然后按C-x C-e,然后将指针移动到函数调用的末尾,再次按下C-x C-e。