先确保终端能运行 clj 命令并输出 :ok;再安装 clojure-sublimetext 插件,选择其自带的 clojure 构建系统,用 ctrl/cmd+b 运行,日常单文件执行用 clj -i,需命名空间支持时改用 clj -r 加 load-file。

怎么让 Sublime Text 直接运行 clj 命令
Sublime Text 本身不带 Clojure 运行能力,得靠外部命令调用系统已安装的 clj(Clojure CLI 工具)。关键不是“配置 Sublime”,而是确保终端能跑 clj,且 Sublime 能复用同一环境。
- 先在终端执行
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.12.0"}}}' -e "(println :ok)",看到:ok才算基础就位 - macOS / Linux 用户注意:如果终端能跑但 Sublime 里报
command not found: clj,大概率是 Shell 配置(如~/.zshrc)里的PATH没被 Sublime 加载——启动 Sublime 时要用open -a "Sublime Text" --args或从终端执行subl - Windows 用户确认
clj.bat在PATH中,且 Sublime 的构建系统没硬编码错误路径(比如写成C:\Users\...\clojure\bin\clj.bat而非直接用clj)
用什么构建系统(Build System)最稳
别用网上搜到的自定义 JSON 构建系统拼凑,优先选官方推荐的 clojure-sublimetext 插件自带的 Clojure 构建方案——它默认调用 clj -i 交互式执行当前文件,兼容性好、无额外依赖。
- 装插件:
Package Control → Install Package → clojure-sublimetext(注意不是Clojure-Kit或旧版Clojure) - 装完后,打开一个
.clj文件,菜单栏Tools → Build System → Clojure,快捷键Ctrl+B(Win/Linux)或Cmd+B(macOS)即可运行 - 如果想改构建行为(比如加 deps),编辑
Preferences → Package Settings → clojure-sublimetext → Settings,在clj_command里填完整命令,例如:["clj", "-Sdeps", "{:deps {org.clojure/clojure {:mvn/version \"1.12.0\"}}}", "-i"]
clj -i 和 clj -r 到底该用哪个
-i 是“读取并执行文件”,-r 是“启动 REPL 并加载文件”——两者目的不同,误用会导致“代码没反应”或“卡住不动”。
- 日常单文件运行(比如练习函数、测试小逻辑):用
-i,它执行完就退出,适合构建系统 - 需要反复交互调试(比如改几行再试)、或依赖命名空间 require/require-macros:必须用
-r+(load-file "xxx.clj"),否则ns声明和宏不会生效 - Sublime 默认构建用的是
-i,所以如果你的文件开头有(ns my.core)却报Unable to resolve symbol,不是环境问题,是构建方式不匹配
为什么改了代码却总是跑旧结果
Clojure 编译产物(class 文件)缓存在 target/classes 或 ~/.m2/repository 下,但 Sublime 构建系统默认不清理——尤其用了 -r 启动过 REPL 后,JVM 进程可能还在后台挂着,类已被热加载,新改的代码根本没重编译。
- 每次改完关键逻辑,手动删掉项目根目录下的
target/和classes/(如果有) - 避免在构建系统里写死
-r,除非你明确需要 REPL;多数时候-i更干净 - 如果非要用 REPL,建议单独开终端跑
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.12.0"}}}' -r,然后用(load-file "src/my/core.clj")手动重载,比依赖 Sublime 构建更可控
真正卡住人的往往不是 Clojure 语法,而是 JVM 类加载机制和构建工具链之间的那层透明隔膜——它不报错,只默默执行旧字节码。










