我想在我的Emacs中学习SICP。我已经安装了MIT Scheme,Emacs 24并下载了sicp信息(使用本指南http://www.pchristensen.com/blog/articles/setting-up-and-using-emacs-infomode/)。现在我能够在专用缓冲区(Mx run-scheme)中运行方案解释器,但是当我尝试从 info 缓冲区(Cx Ce)发送一个define表达式时,我收到以下错误:< / p>
Debugger entered--Lisp error: (void-function define)
(define (abs x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x))))
eval((define (abs x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x)))) nil)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
看起来Emacs正在尝试使用Lisp解释器执行此代码。现在解决这个问题,我打开方案缓冲区(* .scm文件),从info复制代码,然后用C-x C-e执行它。但我想直接从info缓冲区执行它。我该如何设置?
答案 0 :(得分:2)
当您在信息模式下按(C-x C-e)
时,Emacs正在调用eval-last-sexp
,因为这是info-mode
(C-x C-e)
中绑定的scheme-mode
是什么?你可以找到使用(C-h c)
?您可以在info
模式下将其他一些组合键绑定到该功能,并使用该组合键。
请注意,信息模式为只读。如果scheme-eval函数将结果插入当前缓冲区,则需要解决此问题。
答案 1 :(得分:0)
您想要运行其他功能,请尝试以下操作:
(define-key Info-mode-map (kbd "C-x C-e") 'lisp-eval-defun)