加载远程Lisp文件

时间:2013-01-17 06:05:05

标签: emacs common-lisp slime tramp

也许这是一个不寻常的案例,但我喜欢连接到运行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框在哪里找到文件?我还尝试将一个load语句插入REPL,如load ssh://...,但结果相同。

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

2 个答案:

答案 0 :(得分:3)

对于您的具体情况,我建议您编译缓冲区(选择整个缓冲区 Cx h ,然后 Cc Cc < / kbd>),而不是文件( Cc Ck )。

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

答案 1 :(得分:2)

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

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