Ctrl+Enter不响应的根本原因是nREPL服务未启动,而非插件问题;Sublime需先通过clojure -M:nrepl手动启动nREPL服务,且Conjure仅连接已运行的socket,不自动拉起服务,SublimeREPL因协议过时已不兼容现代nREPL。

Ctrl+Enter 不响应?不是插件没装好,而是 nREPL 服务根本没起来。 Sublime Text 本身不带 Clojure 运行时,Conjure 或 SublimeREPL 都只是客户端,必须先有本地 nREPL 服务在监听,按键才有意义。
确认 Clojure CLI 环境是否真正可用
别跳过这步——很多“装好了却不动”问题都卡在这里。在终端执行:
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.12.0"}}}' -e "(+ 1 2)"
输出 3 才算通过。如果报错 command not found: clj,说明 clojure 命令没进 PATH;如果报 ClassNotFoundException: clojure.main,说明 deps.edn 缺失或 JVM 启动参数异常。
- macOS/Linux:检查
~/.clojure/deps.edn是否存在,且包含:aliases {:nrepl {...}} - Windows:确保用的是 PowerShell 或 WSL,CMD 下常因路径/引号解析失败导致
clj启动失败 - 版本冲突:
clj -Sdescribe查看实际加载的依赖树,避免org.clojure/clojure被间接降级到 1.10.x(nREPL 1.0+ 要求 ≥1.11.0)
Conjure 连接前必须手动启动 nREPL 服务
Conjure 不会自动拉起 nREPL,它只连已存在的 socket。项目根目录下运行:
clojure -M:nrepl
注意::nrepl 别名必须在 deps.edn 中明确定义,例如:
{:aliases {:nrepl {:extra-deps {nrepl/nrepl {:mvn/version "1.0.0"}}
:main-opts ["-m" "nrepl.cmdline"]}}}
- 终端出现
Started nREPL server on port 34567才算成功,端口可能不同,记下来 - Conjure 默认连
localhost:34567,如果端口变了,得改conjure.json里的"host"和"port" - 别用
lein repl启动后连 Conjure——Leiningen 的 nREPL 协议版本和 Conjure 不完全兼容,容易卡在 handshake
SublimeREPL 的 Clojure 支持基本不可靠
SublimeREPL 对 Clojure 的支持停留在早期 nREPL 协议(0.2.x),而当前主流工具链(clojure-cli + nrepl 1.0+)已不兼容。现象包括:
- 按
Ctrl+Enter后光标卡住,REPL 窗口无响应 - 发送代码后提示
java.lang.IllegalArgumentException: No implementation of method: :send of protocol: #'nrepl.core/Sender found for class: nrepl.transport$fn__1198 - 即使能连上,
defn定义后无法被后续表达式识别(namespace 隔离失效)
实操建议:直接卸载 SublimeREPL 的 Clojure 相关配置,改用 Conjure。它原生适配 nREPL 1.0+,支持 ns 切换、eval-defun、doc 查询等关键功能,且配置项极少——多数人只需确保 conjure.json 存在且为空对象 {} 即可工作。
常见快捷键失效的底层原因
Conjure 默认绑定 ctrl+enter 为 conjure.eval.focus,但该命令依赖焦点在源码视图。容易被忽略的细节:
- 文件未保存为
.clj后缀 → Conjure 不识别为 Clojure 文件,快捷键无响应 - 当前视图是 REPL 输出面板(而非编辑器标签页)→ 快捷键发给 REPL 窗口,不是代码
- Sublime Text 设置里禁用了
ignored_packages中的Conjure→ 插件根本没加载,命令面板搜不到Conjure: Connect - Mac 上
ctrl+enter被系统快捷键占用(如 Mission Control)→ 改用cmd+enter或重绑 Conjure 的 keymap
最稳妥的验证方式:打开一个 test.clj,按 ctrl+alt+c → c(Conjure: Connect),看到状态栏出现 nREPL connected,再试 ctrl+enter。


















