【问题标题】:How to set SBCL's current directory using slime?如何使用 slime 设置 SBCL 的当前目录?
【发布时间】:2012-02-23 23:48:21
【问题描述】:

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

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

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

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

欢迎提出任何建议!

【问题讨论】:

    标签: common-lisp sbcl


    【解决方案1】:

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

    如果你想将当前目录更改为正在运行的 Lisp,那么最好的方法是使用 ,cd shortcut。这假设您设置了正确的 slime-repl,因为默认情况下当前的 Slime 安装非常少。请参阅contributed packages,您可能至少需要slime-fancy metapackage

    【讨论】:

    • slime-cd 是 `slime.el' 中一个交互式编译的 Lisp 函数。 (slime-cd DIRECTORY) 使 DIRECTORY 成为 Lisp 的当前目录。返回 swank:set-default-directory 返回的任何内容。
    • 这很有帮助。但是,“cd 快捷方式”的链接已失效。你想到了什么?
    【解决方案2】:

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

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

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

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

    自从我开始使用这种方法以来,我对 SBCL 中的cd-ing 的需求下降到零。 cd-ing 周围并不难,但不用担心的事情就很好了。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 2015-07-02
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多