3

也许这是一个不寻常的情况,但我喜欢连接到运行 Clozure CL 的远程计算机并在那里编译一些文件,这些文件位于我的本地桌面上。

所以,我现在实现的是连接到我的远程 Lisp 盒子。我已经使用 Emacs 完成了它。因此,我在 .emacs 文件中添加了一些行:

(load (expand-file-name "~/quicklisp/slime-helper.el"))

(require 'slime)
(require 'tramp)
(setq tramp-default-method "ssh")

它似乎工作正常。设置我的 ssh 隧道后

ssh -L4005:127.0.0.1:4005 pi@192.168.0.100

我在本地 emacs 中从 Clozure CL 获得了正常的 REPL。

此外,如果我想通过 Emacs 中的 ssh 从网络中的任何 PC 加载文件,我可以做到。但是,如果我尝试使用最近(在 Emacs 中)加载的文件来编译缓冲区,我总是会得到这个错误:

File "/ssh:ingmar@192.168.0.103:/home/ingmar/Dokumente/Lisp/util.lisp" does not exist.
   [Condition of type CCL::SIMPLE-FILE-ERROR]

Restarts:
 0: [RETRY-LOAD] Retry loading "/ssh:ingmar@192.168.0.103:/home/ingmar/Dokumente/Lisp/util.lisp"
 1: [SKIP-LOAD] Skip loading "/ssh:ingmar@192.168.0.103:/home/ingmar/Dokumente/Lisp/util.lisp"
 2: [LOAD-OTHER] Load other file instead of "/ssh:ingmar@192.168.0.103:/home/ingmar/Dokumente/Lisp/util.lisp"
 3: [RETRY] Retry SLIME REPL evaluation request.
 4: [*ABORT] Return to SLIME's top level.
 5: [ABORT-BREAK] Reset this thread
 --more--

Backtrace:
  0: (NIL #<Unknown Arguments>)
  1: (CCL::%LOAD "/ssh:ingmar@192.168.0.103:/home/ingmar/Dokumente/Lisp/util.lisp" NIL NIL :ERROR :DEFAULT NIL)
  2: (NIL #<Unknown Arguments>)

如何告诉远程 Lisp 框在哪里可以找到文件?我也尝试在 REPL 中插入一个 load 语句load ssh://...,但结果相同。

有没有人有一些建议可以做什么,以便我可以在远程 Lisp 机器上编译本地文件?我认为这并不是什么新鲜事物,因为 Lisp 可以远程操作很长一段时间......

4

2 回答 2

3

对于您的特定情况,我建议您编译缓冲区(选择整个缓冲区C-x h,然后C-c C-c),而不是文件(C-c C-k)。

令人烦恼的是,这会改变缓冲区的点和标记。希望您不会一直编译整个缓冲区。

于 2013-01-29T11:06:06.993 回答
2

表单的tramp包名和文件名/ssh:user@host:path...是 Emacs 的特性,这就是它们在 Clozure 中不起作用的原因。

除非 Clozure 本身支持通过 ssh 加载代码(这不太可能),否则您将需要重新考虑您的策略。一种选择是在本地编辑文件并使用rsyncssh ssh 隧道轻松同步更改,以便 Clozure 可以看到最新文件。

于 2013-01-17T09:22:06.703 回答