如何使用 Emacs 运行方案?

Posted

技术标签:

【中文标题】如何使用 Emacs 运行方案?【英文标题】:How to run scheme with Emacs? 【发布时间】:2011-05-14 16:17:47 【问题描述】:

我关注了这个tutorial,并成功安装了 Emacs、STk、Quack。

问题是如何像在 Racket 中那样加载我的程序?

在 Racket 中,我可以在上方窗口中编辑我的代码,输入一些代码,保存并运行。然后下面的窗口会自动加载我刚才写的代码。然后我就可以玩了。

我已经尝试过 M-x 运行方案。它只会让我进入类型 mit-scheme。然后它说不存在这样的文件或目录。然后我尝试了 F5(该网站的作者写了一个 .emacs 文件使我能够按 F5)。然后 STk 打开。我可以在 STk 中加载我的方案文件。但它会让我回到 edwin 的 MIT 计划。

我想在 Racket 中拥有同样的东西(Write/REPL)。但更灵活的关键运动。在 Racket 中,你没有 C-f C-n C-a...等。

谁能教我怎么做?

【问题讨论】:

不是您的问题的答案,而是:Racket 与 STk 非常不同。这方面的一个特定方面与您的问题更相关——在 STk 中,您使用 load 加载文件,因为没有模块系统(至少我不知道)。 感谢您的回复。我只想在 Emacs 中使用 STk(或任何实现)作为内部编译器来编译我的代码。不管怎样,谢谢!!! :D 【参考方案1】:

我确实只是在我的 Macbook 上设置了这个。由于您没有指定您使用的系统,我希望您使用一些 Unix 风格......我真的不熟悉 STk,但这可能会帮助您解决您遇到的任何问题,这听起来真的类似于我遇到的问题。

如果您安装一个 Scheme 实现(我使用的是 MIT Scheme,经过编辑添加这也适用于 Racket,使用 mzscheme)它可能带有一个名为“scheme”的符号链接 - 我认为这就是 Emacs 所寻找的。

如果没有(MIT Scheme 在 OS X 上似乎没有),您可以编辑您的 Emacs 配置,在 Emacs 中输入M-x customize-group,然后输入scheme。向下滚动一点,找到Scheme program name 字段。将其更改为您的 Scheme 实现命令,例如 mit-schememzscheme。您也可以在 PATH 中创建一个指向正确二进制文件的符号链接:

sudo ln -s /Applications/mit-scheme.app/Contents/Resources/mit-scheme
    /usr/local/bin/scheme

对于 MIT Scheme,您还需要设置 MITSCHEME-LIBRARY-PATH 变量,因此请将其添加到您的 .emacs

(setenv "MITSCHEME_LIBRARY_PATH"
    "/Applications/mit-scheme.app/Contents/Resources")

那么你应该可以用M-x run-scheme 启动一个劣质的Scheme 缓冲区。并使用C-x C-e 将代码传递给 REPL,它会计算点之前的表达式。

如果这不起作用(它不适合我),您可能需要确保 Emacs 用于执行 shell 命令的路径包括 scheme 符号链接或任何包含您实现的二进制文件的目录。通过一些实验,我通过将其添加到我的 .emacs 文件来解决此问题:

Emacs is ignoring my path when it runs a compile command

对于参考,我用来设置的另一个 SO 问题:

How do I get a scheme interpreter working inside Emacs?

【讨论】:

对不起,我没有提到我的系统是 windows。我会试试你的方法。非常感谢!!!!美好的一天! 对不起,如果它在 Windows 上不起作用。根据 MIT Scheme 站点,xscheme.el 接口库与非 Unix 系统不兼容,但我不知道基本的 C-x C-e send-to-REPL 是否有效。回来报告! @Joe 在我的 Emacs 上(OS X 上为 23.2.1)C-c C-e 并没有真正起作用:单独它不会将前面的表达式发送到 REPL。但是,如果我使用C-x C-e 跟随它,它会发送我执行C-c C-e 时之前的任何表达式,然后发送当前在该点下的表达式。你能解释一下吗? 啊,我想通了,C-c C-e 发送最后一个定义,而C-x C-e 发送最后一个 S-exp。 我想提一下,您可以完全跳过 scheme-program-name 配置,前缀为:C-u M-x run-scheme,它会提示输入一个。如果您有多个躺在那里(csigsichibi-scheme 甚至 ssh host scheme),这将非常方便。【参考方案2】:

现在从 GNU 下载的 64 位 .app 名为“MIT:GNU Scheme.app”。我尝试了@spacemanaki 的指示,但我不断得到:

bash-3.2$ export MITSCHEME_LIBRARY_PATH=/Applications/MIT:GNU\ Scheme.app/Contents/Resources
bash-3.2$ scheme
    scheme: can't find a readable default for option --band.
    searched for file all.com in these directories:
    /Applications/MIT
    /Applications/MIT:GNU Scheme.app/Contents/Resources/GNU Scheme.app/Contents/Resources

最终我意识到分号充当了路径分隔符。所以只要确保你重命名它:

mv MIT:GNU\ Scheme.app/ mit-scheme.app

那么上面的说明就可以正常工作了——尽管您可能必须使用 Finder 来进行重命名,因为当我在 shell 上进行重命名时,我的 Resources 文件夹消失了。

【讨论】:

非常感谢。我不知道是什么导致了该错误消息【参考方案3】:

如果您在 Mac 上,我建议使用 Homebrew 通过简单的命令 brew install mit-scheme 安装 mit-scheme。找到您的~/.emacs file,如果不存在则创建一个,将其附加到文件末尾:

(setq scheme-program-name  "your/mit-scheme/path")

使用which mit-scheme 命令找出你的 mit-scheme 的安装位置。 以我的 MacOS X 为例:

(seq scheme-program-name   "/usr/local/bin/mit-scheme")

保存并退出。 然后重启你的 Emacs 并输入M+x,你就进入了 mit-sheme。

【讨论】:

(setq scheme-program-name "/usr/local/bin/mit-scheme") ;;新手莫名其妙的错字!

以上是关于如何使用 Emacs 运行方案?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改emacs上的光标颜色

如何在 Emacs 中运行 Cygwin Bash Shell?

如何在 shell 外使用 sudo 运行 Emacs 命令? [复制]

在使用 emacsW32 的 windows 上关闭当前窗口 (x) 时,如何保持 emacs 服务器运行?

Emacs shell 中的屏幕:如何分离?

如何在emacs中使用[delete]键删除区域