Clojure 在 Sublime Text 中需手动启动 nREPL、正确继承 PATH 并统一缩进为 4 空格,否则 Ctrl+Enter 无响应、补全失效、括号不彩虹高亮;语法须手动绑定至 .clj 文件,且禁用 BracketHighlighter 类插件。

Clojure 在 Sublime Text 中不是开箱即用的,装插件 ≠ 能写能跑。真正卡住人的从来不是“怎么高亮”,而是“为什么 Ctrl+Enter 没反应”“为什么 defn 不补全”“为什么括号不 rainbow 高亮”。核心问题就一个:你连的是编辑器,不是 REPL。
为什么 Clojure 插件装了但 Ctrl+Enter 仍静音?
因为 Clojure 插件(作者 tonyjwilliams)只管语法高亮、括号配对和基础缩进逻辑,它不启动也不连接 REPL。Ctrl+Enter 的本质是「把当前 S-表达式发给 nREPL」,没服务端监听,消息直接丢弃。
- 必须手动在项目根目录运行
clojure -M:nrepl(确保deps.edn里定义了:nrepl别名),不能用lein repl - Sublime 启动方式影响 PATH:macOS/Linux 用户别从 Dock 点开,改用终端执行
subl或open -a "Sublime Text" --args - Windows 用户若
clj.bat装在含空格或中文路径(如C:\Program Files\Clojure),Sublime 基本找不到;建议移到C:/tools/clojure,并在插件设置中显式填"clojure_cmd": ["C:/tools/clojure/clj.bat", "-M"] - 验证是否拿到 PATH:按
Ctrl+`打开 Python 控制台,输入import os; os.environ.get("PATH"),确认输出包含clj所在目录
如何让 .clj 文件自动识别为 Clojure 语法?
Sublime 不靠内容判断语言,只认后缀 + 手动绑定。打开 .clj 文件右下角显示 Plain Text,说明语法根本没激活,高亮、括号匹配、快捷键全部失效。
- 临时方案:点击右下角语言名 → 选
Clojure(注意不是Lisp或Scheme) - 永久绑定:打开一个
.clj文件 →Ctrl+Shift+P→ 输入Set Syntax: Clojure→ 再执行Open all with current extension as…→ 选Clojure - 如果还用
.cljs,同样操作绑定一次;避免装 Parinfer 或 Clojure-Kit —— 它们会重排代码,导致ns加载失败或defn参数错位
缩进设成 4 空格为何必须关掉 detect_indentation?
Clojure 缩进不是风格问题,是语法语义的一部分。defn 后多缩进一级、let 绑定对齐错位,clojure-lsp 可能不报错,但 (require 'my.ns) 直接抛 RuntimeException。
- 打开
Preferences → Settings – Syntax Specific(确保当前文件语法是Clojure) - 加入三行:
"detect_indentation": false、"tab_size": 4、"translate_tabs_to_spaces": true - 已有文件混入
tab?全选 →Ctrl+Shift+P→Convert Indentation to Spaces,再用Ctrl+Shift+P→Find: Show All Characters手动删掉残留的→
括号不 rainbow 高亮,是不是插件没装好?
大概率是冲突。Clojure 插件自带 rainbow 括号逻辑,不需要额外装 BracketHighlighter 或 BracketHighlighter2 —— 这些插件会接管括号渲染,反而让 Clojure 插件的配对逻辑失效。
- 先禁用所有 BracketHighlighter 类插件,重启 Sublime
- 确认右下角语法是
Clojure,不是Plain Text或Lisp - 新建空白
.clj文件,输入(defn foo [] (println "hi")),看括号是否逐层变色;若仍不生效,检查插件是否被其他插件覆盖作用域(比如 Parinfer 已启用)


















