过去,我使用以下脚本启动SBCL:
breakchars="(){}[],^%$#@\"\";:''|\\"
cd /media/E/work
exec rlwrap --remember -c -b "$breakchars" -f "$HOME"/.sbcl_completions sbcl --noinform --userinit "$HOME"/.sbclrc "$@"
现在在emacs中使用史莱姆时,我不知道如何设置SBCL的当前目录?
任何建议都值得赞赏!
为什么需要从SLIME更改当前目录?我认为这不是因为您要从当前正在编写的系统中访问Lisp源文件,而是因为您想编写用于读取或写入包含数据的文件的代码。
[如果是这样,最好在local-projects
中尝试local-projects
。与Quicklisp一起使用,可以轻松创建系统,然后可以使用quickproject
甚至是quickproject
进行加载。
如果需要引用相对于系统(ql:quickload 'my-system)
根目录定位的数据文件(仅使用最后一段中的名称以使示例保持一致),则可以使用(require 'my-system)
。例如,my-system
。
当然,部署是完全不同的业务。我的解决方案是查看asdf:system-relative-pathname
,以确定代码是否已部署或正在开发中。如果在开发中,我将使用asdf:system-relative-pathname
。如果已部署,我将根据可执行文件的路径来确定文件的路径(在构建项目时,我的“构建脚本”会将这些文件复制到可执行文件旁边)。
[自从我开始使用这种方法以来,我在SBCL中对(asdf:system-relative-pathname 'my-system "files/data.txt")
的需求降为零。 how the running executable was called并不难,但少担心的事情也很好。
SLIME使用当前目录启动Lisp系统,该目录取自与当前缓冲区关联的文件所在的目录。通常,您将打开一个文件,希望SLIME首先启动。
如果要在运行的Lisp中更改当前目录,那么最好的方法是使用asdf:system-relative-pathname
。这假定您已正确设置了粘液复制,因为默认情况下当前的Slime安装非常少。请参阅cd
,您可能至少需要cd
。