【问题标题】:Send code to scheme interpreter from info buffer从信息缓冲区向方案解释器发送代码
【发布时间】:2011-11-04 08:08:37
【问题描述】:

我想在我的 Emacs 中学习 SICP。我已经安装了 MIT Scheme、Emacs 24 并下载了 sicp 信息(使用本指南 http://www.pchristensen.com/blog/articles/setting-up-and-using-emacs-infomode/)。现在我可以在专用缓冲​​区(M-x run-scheme)中运行方案解释器,但是当我尝试从 info 缓冲区(C-x C-e)发送定义表达式之一时出现以下错误:

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 执行它。但我想直接从信息缓冲区执行它。我该如何设置?

【问题讨论】:

    标签: emacs scheme sicp


    【解决方案1】:

    当您在信息模式下按 (C-x C-e) 时,Emacs 正在调用 eval-last-sexp,因为这是在 info-mode 中绑定的组合键

    (C-x C-e) 绑定到 scheme-mode 中的是什么?您可以使用(C-h c) 查找?您可以在info 模式下将其他组合键绑定到该函数并使用该组合键。

    请注意,信息模式是只读的。如果 scheme-eval 函数将结果插入当前缓冲区,您将需要解决方法。

    【讨论】:

      【解决方案2】:

      你想运行一个不同的函数,所以试试这个:

      (define-key Info-mode-map (kbd "C-x C-e") 'lisp-eval-defun)
      

      【讨论】:

        猜你喜欢
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        相关资源
        最近更新 更多