sublimerepl启动clojure repl卡在“connecting…”是因为未安装leiningen或path不可见,需终端验证lein --version并显式配置clojure路径;若用nrepl还需设置nrepl-port和nrepl-host。

SublimeREPL 启动 Clojure REPL 为什么卡在“Connecting…”
默认配置下,SublimeREPL: Clojure 命令会尝试连接本地 lein repl,但不会自动安装或启动 Leiningen。如果系统没装 Leiningen,或者 PATH 里找不到 lein,就会无限等待,界面只显示“Connecting…”且无错误提示。
- 先确认终端能运行
lein --version;不能则去 leiningen.org 下载并加入 PATH - SublimeREPL 不读取 shell 的 PATH,需显式指定:打开
Preferences → Package Settings → SublimeREPL → Settings – User,填入:{ "clojure": "C:\bin\lein.bat" // Windows // 或 "/usr/local/bin/lein" // macOS/Linux } - 若用 nREPL(如 Cider 风格),需额外配置
nrepl-port和nrepl-host,否则仍连本地 lein 进程
Clojure 代码块发送失败:send current block 没反应
Ctrl+, b 发送当前块(block)依赖 Sublime Text 对 Clojure 语法的识别能力。如果当前文件没被正确识别为 Clojure(右下角显示 “Plain Text” 而非 “Clojure”),快捷键就无效。
- 手动设置语法:菜单栏
View → Syntax → Clojure,或保存文件为.clj/.cljs后缀 - 块识别基于括号层级——光标必须落在某个顶层
(defn ...)或(def ...)内部,不能在注释里、字符串里或括号外 - 若用了
#_()形式宏注释,SublimeREPL 会误判括号结构,导致块发送范围错乱
ns 切换后 require 不生效、函数找不到
Clojure REPL 默认在 user 命名空间启动,(require 'my.ns) 后函数仍报 Unable to resolve symbol,是因为 require 只加载,不切换命名空间。
- 必须显式切换:
(in-ns 'my.ns),或合并写成(require '[my.ns :as m]) (in-ns 'my.ns) - 更稳妥的做法是用
(ns my.ns (:require [other.ns :as o])),然后在该 ns 内定义/调用 - SublimeREPL 不保存 ns 状态到新会话——每次重启 REPL 都回到
user,别指望上次的in-ns还有效
中文输出乱码、print 输出延迟、repl 偶尔假死
Clojure JVM 启动参数未适配 SublimeREPL 的 stdin/stdout 管道,会导致编码错乱和缓冲区阻塞,尤其在 Windows 上。
- 在 SublimeREPL 的 Clojure 配置中(
Packages/SublimeREPL/config/Clojure/Main.sublime-menu),找到"cmd"字段,在["lein", "repl"]后追加:["-Dfile.encoding=UTF-8", "--headless"]
- 避免使用
println直接输出大结构体——改用(prn ...)或(clojure.pprint/pprint ...),前者不带缓冲,后者可设:width防卡住 - REPL 假死多因后台线程阻塞(如未关闭的 HTTP server、无限 loop),用
Ctrl+C中断后,再执行(System/exit 0)彻底清理进程
lein repl,再查 Sublime 的 console(Ctrl+`)有没有 Python 层报错,最后才动 Clojure 代码。











