我可以将两个emacs/slime连接到同一个swank实例吗?

Art*_*ldt 11 emacs clojure slime swank leiningen

当我开始冲过莱宁根时,它接受了下一个粘液连接而我离开了.我真的希望有几个emacs实例连接到同一个swank实例.我可以这样做吗?我可以通过莱宁根这样做吗?

Mic*_*zyk 11

好吧,你可以正常启动你的第一个SLIME,然后(require 'swank.swank)(或者默认需要它......不确定),(swank.swank/start-repl port)port一些端口号替换你可以将SLIME的第二个实例连接到新创建的REPL.

我刚刚完成了,一个Emacs连接到一个REPL lein swank,(swank.swank/start-repl 4006)在第一个Emacs,第二个Emacs中的Mx slime-connect(提供4006作为端口号),然后我可以这样做:

; first Emacs 
(def x 5)

; second Emacs
x ; evaluates to 5
(def y 1234)

; first Emacs
y ; evaluates to 1234
Run Code Online (Sandbox Code Playgroud)

很酷,不是吗?:-)

更新:哦,BTW - (swank.swank/start-repl)在后台启动新的REPL并且不会阻止用于执行它的REPL.返回值是nil,所以我不知道如何杀死新的REPL ...

(更新2:删除了我不再确定的内容.)

更新3:虽然上面的方法是完全通用的,因为它可以连接一个额外的客户端,无论原始Swank实例是如何启动的,使用命令启动Swank可能更方便

lein swank 4005 "localhost" :dont-close true
Run Code Online (Sandbox Code Playgroud)

如果:dont-close true要传递,则必须明确提及端口和主机名参数.4005并且"localhost"是默认值.

这样可以在以后与Swank断开连接并重新连接,还可以同时连接多个客户端.

(我只是注意到这可能在回答关于如何启用Leiningen重新连接的新问题时启动了Swank;我突然想到检查是否:dont-close也会导致同时连接被接受 - 而且确实如此.)

  • '真棒'是正确的词.:-)顺便说一下,您可以使用`swank.swank/start-repl`在任何Clojure应用程序中嵌入Swank - 我已经读过有关使用它的人非常好的效果.主要的警告是Swank并不关心安全性,所以你必须要注意自己限制访问REPL的端口. (2认同)