首页 文章

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

提问于
浏览
1

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

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

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

4 回答

  • 7

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

    有's no simple option to recover functions you' ve只能将repl输入到文件中 . function-lambda-expression有时可以返回代码,但通常不会 .

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

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

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

  • 2

    另请参见函数 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.
    

    我们来看看文件:

    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.
    
  • 0

    Xach的答案中的最后一段是它的全部内容 .

    在Lisp中编程时,直接在REPL中键入函数定义是错误的方法 . 正确的方法是设置文本编辑器(emacs),以便通过某些键击,将光标处的表达式(整个函数定义)发送到REPL . 然后要调用一个函数,切换到REPL . 这就是SLIME的用途 .

    严格地说,emacs缓冲区中的文本不必写入磁盘文件,在这种情况下,关闭编辑器后它将消失 . 但通常你将它保存到文件中 .

  • 5

    您可以在REPL历史记录中搜索功能定义 . 如果你已经输入了一个表达式的开头,那么SLIME只会循环显示以相同内容开头的先前条目:

    CL-USER> (defun
    

    从那里按 M-P ,您将循环显示您输入的所有 defun .

相关问题