sublime text 本身不运行 clojure,执行依赖本地 clojure cli(clj)和 jvm;配错环境变量、混用构建工具、缩进错误是 80% 失败主因,需确保终端 clj 可运行、sublime 继承 path、手动启动 nrepl 服务端,并以项目文件夹方式打开工程。

Sublime Text 本身不运行 Clojure,它只负责把代码发给外部 REPL 或调用 clj 命令;真正执行靠的是你本地装好的 Clojure CLI(clj)和 JVM。配错环境变量、混用 Leiningen 和 clj、缩进用 tab 而不是空格——这三类问题占了 80% 的失败案例。
clj 命令在终端能跑,但 Sublime 里报 command not found
这不是 Sublime 的问题,是它的子进程没继承你的 Shell 环境变量(尤其是 PATH)。macOS/Linux 用户常见于用了 zsh 但 Sublime 是从 Dock 启动的;Windows 用户常因安装路径含空格或中文导致 clj.bat 找不到。
- macOS/Linux:别点图标启动 Sublime,改用终端执行
open -a "Sublime Text" --args或subl - Windows:把
clj安装到纯英文无空格路径(如C:/tools/clojure),并在插件设置中显式填完整路径:"clojure_cmd": ["C:/tools/clojure/clj.bat", "-M"] - 验证方式:在 Sublime 中打开 Python 控制台(
Ctrl+`),输入import os; os.environ.get("PATH"),确认输出里有clj所在目录
Ctrl+Enter 没反应,或发送代码后 REPL 无输出
这是最典型的「以为装了插件就等于连上 REPL」误区。SublimeREPL、ClojureSublimed、Conjure 这些插件都只是“客户端”,必须先手动启动一个 nREPL 服务端,它们才能连接。
- 确保项目根目录有
deps.edn(哪怕只写{:paths ["src"]}) - 终端进入项目根目录,运行
clojure -M:nrepl(前提是deps.edn里定义了:nrepl别名);别用lein repl,Conjure 对它的兼容性差 - ClojureSublimed 用户:按
Ctrl+Shift+P→ 输入ClojureSublimed: Start nREPL,不要跳过这步 - 如果插件提示连接失败,检查
conjure.edn或插件设置里的:host和:port是否与 nREPL 启动时输出的一致(默认localhost:5555)
括号不匹配、缩进错位、defn 后 Tab 不展开模板
Clojure 对缩进语义敏感,不是风格问题——缩进错一个空格,clojure-lsp 可能不报错,但 REPL 加载时直接抛 java.lang.RuntimeException: Unable to resolve symbol。
- 关闭 Sublime 的自动检测缩进:
"detect_indentation": false(必须加在Preferences → Settings – Syntax Specific里,且当前语法为 Clojure) - 强制设为 4 空格:
"tab_size": 4和"translate_tabs_to_spaces": true - 已有文件混入 tab:全选 →
Ctrl+Shift+P→Convert Indentation to Spaces,再手动搜索→(显示为箭头的 tab 字符)删干净 - Tab 展开
defn模板需开启 snippet:"enable_snippets": true(ClojureSublimed 设置中),并确认没被 AutoFileName 或 Emmet 插件劫持Tab键
Build System 能跑单文件,但无法热重载或加载依赖
Build System 是一次性脚本执行,每次 Ctrl+B 都新建 JVM 进程,冷启动慢、不共享状态、不读 deps.edn 别名——它适合跑测试脚本,不适合开发。
- 日常开发请用 REPL:写完
(defn foo [] :ok),光标停在括号内按Ctrl+Enter即可求值,结果立刻返回 - 如果非要用 Build System,优先用
clojure-sublimetext插件自带的,它默认调clj -i,比手写 JSON 构建系统更稳 - 要加载项目依赖,构建命令必须显式带
-Sdeps参数,例如:["clj", "-Sdeps", "{:deps {org.clojure/clojure {:mvn/version \"1.12.0\"}}}", "-i"] - 命名空间不一致会失败:Build System 默认按文件名推导 ns,
foo.clj要对应(ns foo),否则load-file报错
最易被忽略的一点:所有插件(Conjure、ClojureSublimed、SublimeREPL)都依赖你打开的是「整个项目文件夹」,而不是单个 .clj 文件——只有这样,它们才能扫描到 deps.edn、启动正确 classpath、索引符号供跳转。这点在文档里常被一笔带过,但实际卡住新手最多。











