Как сохранить все функции, которые я ввел в LispBox / Slime? - PullRequest
6 голосов
/ 02 января 2009

Ситуация: я ввел несколько функций при работе с REPL в Emacs. Проблема: существует нежелательная почта типа "; Оценка прервана", когда я просто сохраняю буфер. Что я хочу: четкое описание всех функций, которые я ввел в их последней редакции.

Могу ли я это сделать? Спасибо.

Ответы [ 4 ]

5 голосов
/ 02 января 2009

Я искал что-то подобное в прошлом и не смог его найти. Лучше всего записывать все свои определения в отдельный буфер и использовать расширенные функции оценки / компиляции SLIME (Cc Ck загружает весь файл, Cx Ce оценивает последнее выражение, Cc Cr оценивает регион и т. Д.), Только непосредственно входя в REPL вещи, которые вы не хотите сохранять.

5 голосов
/ 02 января 2009

Я не понимаю. Вы вводите определения в REPL и планируете восстановить их позже? Просто сохраните исходный файл, как на любом другом языке. Используйте C-x 2, чтобы разделить окно Emacs на две части. Откройте исходный файл в одном из них C-x C-f foo.lisp. Используйте C-c C-k, C-c C-r и друзей (см. Меню SLIME) для компиляции / оценки областей вашего исходного кода в REPL.

4 голосов
/ 02 января 2009

Гм, C-x o или C-x b, чтобы добраться до буфера SLIME REPL, затем C-x w или C-x C-s, чтобы сохранить его в файл. Весь материал SLIME / CL - комментарий читателя; Вы можете написать хакерскую программу для перезагрузки файла, рассматривая подсказки как комментарии, или вы можете просмотреть файл самостоятельно, чтобы получить фрагменты, которые вы хотите сохранить.

3 голосов
/ 03 января 2009

Я согласен, что лучший метод рабочего процесса - записать свой код в отдельный буфер и оценить его, а не вводить функции в ответ.

Предполагая, что вы прошли путь repl, я думаю, решение C. Martin сохранить журнал repl и вручную просмотреть его - ваши единственные варианты.

Если вы ввели функции и переменные в отдельный пакет, вы можете просмотреть символы в пакете, чтобы помочь вам решить, что вы хотите сохранить.

например. чтобы увидеть все символы, созданные в пакете cl-user:

(let ((p (find-package :cl-user)))
  (loop
     for s being the symbols in p
     when (eq p (symbol-package s))
     do (format t "~a~%" s)))
...