Emacs - slime - 将当前函数保存到文件

asp*_*yct 1 lisp emacs common-lisp

我开始使用CLisp,因此也开始使用Emacs,包括"SLIME"插件(或者不管它叫什么.它是如何调用的?)

所以我已经玩了很长一段时间的REPL,并用(defun)定义了很多函数.

不幸的是,这些函数都没有写在文本文件中,我也不想重新编写这些函数.有没有办法可以将REPL中完成的工作转储或以其他方式保存到文件中?(如果文件是Lisp源代码,奖励积分:))

Xac*_*ach 7

SLIME是一个与Lisp交互的elisp程序.

没有简单的选项来恢复您只在repl中输入到文件中的函数.function-lambda-expression有时可以返回代码,但通常不会.

如果repl仍然在缓冲区中,您可以将整个事物复制到文件中,然后使用字符串或regexp替换来隔离函数定义.

将来避免这个问题并不难.

大多数人的工作是将定义写入文件,然后使用组合键将它们发送到Lisp,绕过REPL.C-c C-c当光标在函数上编译并加载表达式时,我使用组合.C-x C-e也有效.然后我切换REPL实际使用该功能.


Rai*_*wig 5

另请参阅该函数DRIBBLE,该函数确保写入日志.

foo:~$ clisp

...

[1]> (dribble "foo.text")
#<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"foo.text">
[2]> (+ 3 4)
7
[3]> (defun bar (baz) (* baz baz))
BAR
[4]> (bar 10)
100
[5]> (quit)
Bye.
Run Code Online (Sandbox Code Playgroud)

我们来看看文件:

foo:~$ more foo.text 
;; Dribble of #<IO TERMINAL-STREAM> started on 2015-05-08 21:38:48.
#<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"foo.text">
[2]> (+ 3 4)
7
[3]> (defun bar (baz) (* baz baz))
BAR
[4]> (bar 10)
100
[5]> (quit)
Bye.
Run Code Online (Sandbox Code Playgroud)