当我开始冲过莱宁根时,它接受了下一个粘液连接而我离开了.我真的希望有几个emacs实例连接到同一个swank实例.我可以这样做吗?我可以通过莱宁根这样做吗?
我注意到SLIME(Emacs的lisp开发包)没有为CLISP提供frame-source-location函数,因此在调试器内部时无法自动跳转到源位置.鉴于此,我认为CLISP用户必须使用其他一些IDE(虽然我猜IDE在这里有点误导,也许他们只是使用不同的Emacs包).
那么CLISP程序员使用的IDE/Emacs包是什么?
我定义我的函数等时,我不能在emacs + slime + sbcl上使用自动缩进功能.
我的.emacs文件配置是这样的:
(setq inferior-lisp-program
"D:/emacs/sbcl_1.0.37/sbcl.exe"
lisp-indent-function 'common-lisp-indent-function
slime-complete-symbol-function 'slime-fuzzy-complete-symbol
slime-startup-animation nil
slime-enable-evaluate-in-emacs t
slime-log-events t
slime-outline-mode-in-events-buffer nil
slime-repl-return-behaviour :send-only-if-after-complete
slime-autodoc-use-multiline-p t
slime-highlight-compiler-notes t)
(add-to-list 'load-path
"d:/emacs/site-lisp/slime") ; your SLIME directory
(require 'slime)
(slime-setup)
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
我为clojure和常见的lisp设置了emacs,但我也希望(slime-setup'(slime-fancy))用于常见的lisp.如果我将该行添加到init.el,clojure将无法工作:它给了我repl,但它在我运行任何代码后挂起.
对于clojure:
对于常见的lisp,我将它放在init.el中的ELPA代码之后:
(add-to-list 'load-path "~/.elisp/slime")
(require 'slime)
(add-to-list 'slime-lisp-implementations '(sbcl ("/opt/local/bin/sbcl") :coding-system utf-8-unix))
;; (slime-setup '(slime-fancy))
Run Code Online (Sandbox Code Playgroud)
因此,如果我取消注释最后一行,clojure将被破坏.但是,对于黑客攻击常见的口齿不清而言,这是一个非常重要的元包.
有没有办法在不改变配置的情况下将它们设置为工作并在需要切换语言时重新启动?
我发现slime-autodoc装有粘液花式是导致挂起的原因.
(slime-setup '(slime-fancy))
(setq slime-use-autodoc-mode nil)
Run Code Online (Sandbox Code Playgroud)
此配置允许运行常见的lisp和clojure SLIME.甚至同时.但没有史莱姆 - autodoc.
我也发现我正在使用SLIME的CVS版本,因为我在ELPA代码之后手动执行(add-to-list'load-path"〜/ .elisp/slime").这并没有解决问题.也许有一个魔法约会的版本与clojure一起使用?在这里,一个人说CVS版适合他:http://www.youtube.com/watch?v = f_xI3fZdIg&feature = player_detailpage#t = 221s
初始化Lisp会话(我使用Slime和sbcl)的最佳方法是什么,总是使用最大量的调试信息编译函数?
我在archlinux中使用emacs24.如果我使用marmalade.org的slime软件包,那么当我使用Mx slime时,错误是:
debugger invoked on a SB-INT:SIMPLE-FILE-ERROR in thread
#<THREAD "initial thread" RUNNING {AB007A9}>:
Couldn't load
"/home/sinners/.emacs.d/elpa/slime-20100404.1/swank-loader.lisp": file does
not exist.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
Run Code Online (Sandbox Code Playgroud)
但如果我使用官方网站上的slime-cvs软件包,则错误是:
Debugger entered: (("Error in timer" slime-attempt-connection (#<process inferior-lisp> nil 2) (void-variable --cl-accu--)))
#[257 "\302\303\304\300\301F\"\207" [slime-attempt-connection (#<process inferior-lisp> nil 2) debug nil "Error in timer"] 7 "\n\n(fn DATA)"]((void-variable --cl-accu--))
funcall(#[257 "\302\303\304\300\301F\"\207" [slime-attempt-connection …Run Code Online (Sandbox Code Playgroud) 在编写Common Lisp代码时,我使用SLIME.特别是,我使用CC Ck编译包含函数定义的缓冲区,然后切换到REPL以运行这些函数.将可执行代码放在缓冲区中运行这些函数似乎不能很好地工作.如果代码有错误,它可能会弄得一团糟.
有一种方法可以包含不在缓冲区中编译的代码,但是可以从命令行运行,例如在执行时
sbcl --script foo.lisp
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,每次我想从命令行运行代码时,我都不必继续添加和删除代码.是否存在这样的情况?
这类似于Python条件.
if __name__=='__main__':
Run Code Online (Sandbox Code Playgroud)
如果将Python文件作为模块导入,则为false;如果将其作为脚本运行,则为true.
这篇由Googling随机发现的题为"使用SBCL for Common Lisp shell脚本"的博文有
;; If run from command line, the following if-test will succeed
(if (> (length sb-ext:*posix-argv*) 1)
;; Code that is executed from the command line only goes here
)
Run Code Online (Sandbox Code Playgroud)
包含的代码确实不会被SLIME中的编译器运行,但它也不会被运行sbcl --script.
更新:感谢Vsevolod Dyomkin的有用答案和后续行动.关于该答案的一些注释如下,从对该答案的评论中汇编而成.@Vsevolod,如果你将这些添加到你的答案中,我会删除它们.
首先,我问了一种从命令行运行代码的方法,但不是从解释器运行代码.提供的解决方案做得更多; 它还提供了一种从解释器而不是命令行运行代码的方法.
第一步是为宏字符定义一个阅读器宏功能#!.如链接"在遇到宏字符时,Lisp读者调用其读取器宏函数"中所述.读者功能由调用来定义set-dispatch-macro-character.因此,当#!看到该字符时,set-dispatch-macro-character会导致调用正文中定义的lambda函数.然后,此函数将关键字添加:noscript到*features*变量中.另请参阅讨论哪些读取器宏在SO问题中
有用.阅读宏:您使用它们是什么?.
观察到关键字:noscript是*features*在#!角色存在时精确添加的.此外,#! …
我想知道使用Emacs和SLIME以交互方式调试Common Lisp的有效方法是什么.
我之前做过的事情:作为使用IDE(VS和PyCharm)学习C和Python的人,我习惯于设置断点,添加手表,然后踩踏.但是当我开始使用CL时,我发现调试工作流程根本不同.我没有找到设置断点的好方法,通过线条查看变量如何变化.
我使用的哑方法是在代码中添加"print"并反复运行代码,效率非常低.我知道我们可以"检查"SLIME中的变量,但不知道如何以交互方式进行.
我发现的内容:我最近看到了关于摩尔斯电码转换器开发的视频,它展示了如何在SLIME中以交互方式进行调试的完整过程,这一过程非常丰富,具有启发性.就好像我们可以与编译器"交谈"一样.
我想要的是:我在网上搜索但找到了最小的教程,展示了经验丰富的Lisper如何实际开发和调试他们的程序.我渴望学习这样的经历.
我已经决定回到LISP(自我的AI类以来没有使用过它)以便更好地使用函数式编程,所以我下载了Lisp In A Box(我们实际上在以前的类中使用过) CLISP和Emacs.
当我运行它时,它说:
在1617号港口连接.拿这个REPL,兄弟,也许它可以为你服务.
什么?所以我更仔细地查看了Lisp In A Box网页,发现了这个:
SLIME是Emacs的集成开发环境,它通过网络套接字与Common Lisp实现接口.有关SLIME的大量信息可以在CLiki上的SLIME节点上找到.SLIME手册在线提供PDF格式.
我有点理解SLIME是什么(对emacs的某种扩展,对吗?)但是为什么世界上是一个文本编辑器启动自己的服务器并连接到它?
我想在emacs中设置一个编辑clojure的环境.我对emacs(仅1年)相对较新,而且对于clojure(2周)来说是全新的.我在网上找到了很多关于如何设置lein,swank-clojure,slime和nrepl的教程.似乎swank-clojure和slime需要一起工作但是swank-clojure已经弃用了,所以剩下的就是nrepl和一些内置的lisp repl模式.
我首先尝试了劣质的lisp模式,因为它是clojure-mode的默认模式,它对我来说很好看.但我似乎无法找到一种方法在其中轻松切换命名空间.
然后我尝试了emacs-live,这就像是nrepl附带的emacs新手的工具包.然后我可以做"nrepl-jack-in"来获得一个repl,即使它非常慢..它可以用"CC Mn"轻松切换名称空间.然而,在切换之后的某个时候,会弹出一个名为nrepl错误的缓冲区,并且不会让我关闭.我必须强制关闭emacs.此外,nrepl没有太多的语法高亮.
总结一下:在swank-clojure被弃用之后,我应该使用哪个repl?煤泥REPL?nrepl?或其他人?
我现在对clojure知之甚少,所以我不确定bre功能对于repl很重要但是至少有语法高亮并且可以在nrepl中像"CC Mn"之类的命名空间之间轻松切换,这可能是一件好事.调试器.