如何使用 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-scheme
或 mzscheme
。您也可以在 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
,它会提示输入一个。如果您有多个躺在那里(csi
、gsi
、chibi-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 中运行 Cygwin Bash Shell?
如何在 shell 外使用 sudo 运行 Emacs 命令? [复制]