7

过去,我使用以下脚本启动 SBCL:

breakchars="(){}[],^%$#@\"\";:''|\\"
cd /media/E/work

exec rlwrap --remember -c -b "$breakchars"  -f "$HOME"/.sbcl_completions  sbcl --noinform --userinit "$HOME"/.sbclrc "$@"

现在在 emacs 中使用 slime 时,我不知道如何设置 SBCL 的当前目录?

任何建议表示赞赏!

4

2 回答 2

10

SLIME 启动 Lisp 系统时,当前目录取自与当前缓冲区关联的文件所在的目录。通常你会打开一个你希望 SLIME 首先启动的文件。

如果您想将当前目录更改为正在运行的 Lisp,那么最好的方法是使用,cd 快捷方式。这假设您设置了适当的 slime-repl,因为默认情况下当前的 Slime 安装非常少。查看贡献的包,你可能至少想要slime-fancy 元包

于 2012-02-24T05:42:22.427 回答
5

为什么需要从 SLIME 更改当前目录?我认为这不是因为您想从当前正在编写的系统中访问 Lisp 源文件,而是因为您想编写代码来读取或写入包含数据的文件。

如果是这样,最好local-projectsQuicklisp中尝试。与 一起quickproject,它允许您轻松创建系统,然后您可以使用(ql:quickload 'my-system)或什至加载这些系统(require 'my-system)

如果您需要引用相对于系统根目录的数据文件my-system(仅使用最后一段中的名称以保持示例一致),您可以使用asdf:system-relative-pathname. 例如,(asdf:system-relative-pathname 'my-system "files/data.txt").

当然,部署是完全不同的业务。我的解决方案是查看如何调用正在运行的可执行文件来确定代码是已部署还是正在开发中。如果在开发中,我使用asdf:system-relative-pathname. 如果部署,我会根据可执行文件的路径确定文件的路径(我的“构建脚本”在构建项目时将这些文件复制到可执行文件旁边)。

自从我开始使用这种方法以来,我对cdSBCL 中的 -ing 的需求下降到零。cd- 到处走走并不难,但担心的事情少一点是件好事。

于 2012-02-24T07:10:03.153 回答