nrepl 服务未启动是 ctrl+enter 不求值的主因,conjure 仅作客户端,需手动运行 clojure -m:nrepl 启动服务并确保 clj 环境可用。

Ctrl+Enter 不触发求值,不是插件没装好,而是 nREPL 服务根本没起来——Sublime 的 Clojure 插件(Conjure 或 SublimeREPL)只是客户端,不负责启动运行时。
确认本地 Clojure CLI 环境可用
别跳过这步。很多问题根源在此:命令行里跑不通 clj,编辑器里一定连不上。
- 执行
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.12.0"}}}' -e "(+ 1 2)",输出3才算通过 - 若提示
command not found或'clj' is not recognized,说明clojure-tools没装或没进PATH - Windows 用户特别注意:
clj.bat若在含空格路径(如C:\Program Files\clojure\),Conjure 启动会静默失败;建议重装到C:\clojure\或用mklink建符号链接
用 Conjure 连接本地 nREPL(推荐路径)
SublimeREPL 对 Clojure 支持弱、配置繁琐,Conjure 是当前事实标准,原生适配 clj 和 deps.edn。
- 通过 Package Control 安装
Conjure,重启 Sublime - 确保项目根目录有
deps.edn,且含:nrepl别名(例如:{:aliases {:nrepl {:extra-deps {nrepl/nrepl {:mvn/version "1.3.0"}} :main-opts ["-m" "nrepl.cmdline"]}}}) - 终端 cd 到项目根目录,运行
clojure -M:nrepl—— 这会启动一个监听localhost:30001的 nREPL 服务 - 回到 Sublime,按
ctrl+alt+c→c(即Conjure: Connect),选默认地址即可连上 - 连上后状态栏显示
conjure connected,此时光标在(defn foo [] (println "hi"))开头按ctrl+enter才会求值整个 form
避免 SublimeREPL 的典型陷阱
如果你坚持用 SublimeREPL(比如旧项目迁移),这些坑几乎必踩:
-
ClassNotFoundException: clojure.main:说明 classpath 错了。不要手动写java -cp ... clojure.main,改用lein或clj命令作为入口 - 快捷键绑定错成
repl_clojure(空 REPL)而非repl_clojure_run(运行当前文件)——后者才真正发送代码 - 未保存
.clj文件就按快捷键,SublimeREPL 会静默忽略,不报错也不输出 - Windows 下
project.clj路径含中文或空格,lein repl启动失败,导致 Conjure/REPL 都连不上
光标位置决定求值范围
Conjure 默认“向上找最近的 S-expression”,不是整文件也不是整段函数体。
- 光标在
(println "hi")内部 → 只求值该表达式 - 光标在
defn开头或选中整个(defn ...)→ 才定义函数 - 想求值整个文件?用
Conjure: Eval file(默认快捷键ctrl+alt+e),别依赖光标位置猜行为 - Parinfer 插件可辅助括号匹配,但不会改变 Conjure 的求值逻辑——它只管格式,不管语义
最常被忽略的是:nREPL 服务必须由你手动启动(或由 Conjure 自动拉起),插件本身不带 JVM、不下载依赖、不解析 deps.edn。连不上,永远不是快捷键或语法高亮的问题。











