【问题标题】:How to save lisp interaction history for future re-load?如何保存 lisp 交互历史以供将来重新加载?
【发布时间】:2018-01-21 09:42:10
【问题描述】:

我使用portacle 作为我的 Common Lisp 环境。当我保存我的文件时,它会保存整个 REPL,包括 CL-USER>。当我尝试加载文件时,这会导致编译错误。

我想保存代码并从我离开的地方继续。我一直在 REPL 编写代码,使用 key-chords C-x C-s 将缓冲区中的工作保存在文件中。但这破坏了项目的连续性。请提出一种方法来做到这一点。

【问题讨论】:

  • 像使用任何其他语言一样编辑文件代码并使用C-c C-c 编译当前顶层表单或使用C-c C-k 编译和加载整个文件。 REPL 更适合小型实验、运行测试、使用开发工具(分析器、检查器等)等。
  • 我在迷你缓冲区尝试了 C-c C-k 和弦,但它显示未定义。是否必须通过(load pathname.lisp) 加载文件然后使用C-c C-c/ C-c C-k 编译。
  • 文件是否使用lisp模式? Portacle 也可能为它们定义不同的键。尝试使用 M-x describe-function 查看 SLIME 手册中列出的 compilation commands 的键绑定。
  • 什么是未定义的?您打开一个 .lisp 文件并在其中打开 C-c C-k(不涉及迷你缓冲区)。另外,希望这会有所帮助:lispcookbook.github.io/cl-cookbook/getting-started.html

标签: common-lisp slime


【解决方案1】:

如果您在终端中使用 REPL,您可能会发现 dribble很有用。

然而,如果你在 Emacs 中运行,你几乎不应该输入 任何在提示自己。 你在 Lisp 模式下编辑一个 Lisp 文件并将你的代码发送到 Lisp REPL 使用C-x C-e or C-M-x &c.

您还应该考虑使用SLIME,它也与您的Portacle 一起提供。

【讨论】:

  • 我将添加 eval-in-repl 及其 M-x eir-slime 函数,当我想使用命令的输出时很方便(在 C-x C-e 之后的 REPL 中不可用)。
【解决方案2】:

在门户中:

  1. 确保 REPL 窗口是活动窗口
  2. 点击:文件->另存为,输入“repl.log”作为名称

使用任何编辑器:

  1. 为 repl.log 创建一个名为 xyz.lisp 的副本
  2. 编辑 xyz.lisp,删除不是函数或变量定义的所有内容。

在重启的portacle中:

  1. 使用 (ctrl-X O) 切换到暂存缓冲区
  2. 将 xyz.lisp (ctrl-X ctrl-F) 加载到缓冲区
  3. 用 (ctrl-C ctrl-K) 编译并加载到 REPL 缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多