Ubuntu 19下Emacs SLIME执行(read)无响应及批量执行脚本问题
关于SLIME中
read无响应与批量执行脚本的解决方案 一、(defvar *name* (read))无响应的原因及解决办法
你遇到的“无响应”其实问题出在**read函数的输入逻辑和SLIME的执行上下文不匹配**:
- 当你在代码缓冲区用
C-c C-p执行单行代码时,SLIME会后台评估这段代码,但read是从标准输入读取内容,而SLIME把标准输入绑定到了SLIME REPL缓冲区,不是你当前编辑代码的窗口。 - 这时候Emacs其实在等你往REPL里输入值,但你的焦点在代码窗口,根本没注意到输入提示,自然就觉得卡住了。
解决起来很简单:
- 直接切到SLIME REPL窗口,输入你要赋值的内容(比如
"Bob")按回车,代码就会继续跑,*name*变量也会被正确设置; - 要是你更习惯在代码区操作,要么把这段带
read的代码移到REPL里执行,要么后续用交互式输入的时候,提前切换到REPL再执行代码,这样流程更顺。
二、批量执行整个脚本的方法
在SLIME里批量跑脚本有几种实用方式,挑你顺手的用:
- 一键加载整个文件:打开你的Lisp脚本后,直接按
C-c C-k(对应命令slime-load-file),SLIME会把整个文件的代码加载到SBCL环境执行,而且会记住文件路径,后续改完代码再按一次就能重新加载; - 执行选中的代码块:如果只需要跑文件里某一段,用鼠标或键盘选中这段代码,按
C-c C-r(对应命令slime-eval-region),就能批量执行选中的内容; - 在REPL里手动加载:切到SLIME REPL,输入
(load "/home/yourname/your-script.lisp")(替换成你脚本的实际路径),回车后就会加载并执行整个文件。
内容的提问来源于stack exchange,提问作者Omegaspard
相关产品推荐
相关产品推荐

