如何设置Sublime Text以运行Clojure Lisp方言代码?
- 内容介绍
- 文章标签
- 相关推荐
本文共计952个文字,预计阅读时间需要4分钟。
Sublime Text 本身不自带 Clojure 运行时,使用快捷键 Ctrl+Enter 是将表达式发送到 nREPL,而不是本地求值。插件安装完毕后,如果没有启动 nREPL 服务端,就相当于电话接通了但没拨号码。
- 必须先在项目根目录运行
clojure -M:nrepl(确保deps.edn里有:nrepl别名) - 别用
lein repl启动——Conjure 和 ClojureSublimed 对它的兼容性差,容易断连 - 检查 nREPL 启动日志,确认输出类似
Started nREPL server on port 5555;如果端口被占,改conjure.edn里的:port - Conjure 用户:按
Ctrl+Shift+P→ 输入ClojureSublimed: Start nREPL,不是SublimeREPL: Clojure
Build System 跑 .clj 文件只适合一次性脚本
用 Tools → Build System → Clojure(来自 clojure-sublimetext 插件)或自定义 JSON 构建系统,本质是调 clj -i $file。它不加载命名空间、不解析 ns、不 require 依赖,纯当脚本解释器用。
- 适合场景:单文件练习、简单函数验证,比如
(println (+ 1 2)) - 不适合场景:含
(ns my.app)或宏定义的文件——会报Unable to resolve symbol - 想让 ns 生效?改用
clj -r+(load-file "src/my/app.clj"),但这已脱离 Build System 范畴,得进 REPL 手动操作 - Windows 下路径含空格或中文?构建系统里别写
clj,直接填完整路径:["C:/tools/clojure/clj.bat", "-i", "$file"]
缩进错一个空格,REPL 就可能加载失败
Clojure 缩进不是风格问题,是语法语义的一部分。defn 后多缩进一级、let 绑定对齐错位,clojure-lsp 可能不报错,但 (require 'my.ns) 时直接抛 RuntimeException。
- 必须关闭自动检测:
"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,再手动删残留→字符(用Ctrl+Shift+P→Find: Show All Characters显式查看) - Parinfer 插件慎用:它会自动重排括号结构,新手易被带偏;Clojure 插件自带 rainbow parentheses 已够用
补全/跳转失效?大概率是没打开项目文件夹
Clojure 插件(如 Conjure、ClojureSublimed)的语义分析依赖项目结构。只打开单个 .clj 文件,插件就当纯文本处理,自然没符号索引、没跳转、没文档提示。
- 务必通过
File → Open Folder打开整个项目根目录(含deps.edn或project.clj) -
deps.edn至少要有{:paths ["src"]},否则插件识别不出源码位置 - 右下角状态栏出现
ClojureSublimed: indexing…时别急着跳转,等它变成ready - 跳转定义前,先在 REPL 里执行
(require 'your.ns),否则符号未加载,Ctrl+Click 无效
clj -M:nrepl 启动那一刻起,所有后续功能(求值、跳转、补全)才开始生效——这个手动步骤没法绕,也最容易被忽略。本文共计952个文字,预计阅读时间需要4分钟。
Sublime Text 本身不自带 Clojure 运行时,使用快捷键 Ctrl+Enter 是将表达式发送到 nREPL,而不是本地求值。插件安装完毕后,如果没有启动 nREPL 服务端,就相当于电话接通了但没拨号码。
- 必须先在项目根目录运行
clojure -M:nrepl(确保deps.edn里有:nrepl别名) - 别用
lein repl启动——Conjure 和 ClojureSublimed 对它的兼容性差,容易断连 - 检查 nREPL 启动日志,确认输出类似
Started nREPL server on port 5555;如果端口被占,改conjure.edn里的:port - Conjure 用户:按
Ctrl+Shift+P→ 输入ClojureSublimed: Start nREPL,不是SublimeREPL: Clojure
Build System 跑 .clj 文件只适合一次性脚本
用 Tools → Build System → Clojure(来自 clojure-sublimetext 插件)或自定义 JSON 构建系统,本质是调 clj -i $file。它不加载命名空间、不解析 ns、不 require 依赖,纯当脚本解释器用。
- 适合场景:单文件练习、简单函数验证,比如
(println (+ 1 2)) - 不适合场景:含
(ns my.app)或宏定义的文件——会报Unable to resolve symbol - 想让 ns 生效?改用
clj -r+(load-file "src/my/app.clj"),但这已脱离 Build System 范畴,得进 REPL 手动操作 - Windows 下路径含空格或中文?构建系统里别写
clj,直接填完整路径:["C:/tools/clojure/clj.bat", "-i", "$file"]
缩进错一个空格,REPL 就可能加载失败
Clojure 缩进不是风格问题,是语法语义的一部分。defn 后多缩进一级、let 绑定对齐错位,clojure-lsp 可能不报错,但 (require 'my.ns) 时直接抛 RuntimeException。
- 必须关闭自动检测:
"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,再手动删残留→字符(用Ctrl+Shift+P→Find: Show All Characters显式查看) - Parinfer 插件慎用:它会自动重排括号结构,新手易被带偏;Clojure 插件自带 rainbow parentheses 已够用
补全/跳转失效?大概率是没打开项目文件夹
Clojure 插件(如 Conjure、ClojureSublimed)的语义分析依赖项目结构。只打开单个 .clj 文件,插件就当纯文本处理,自然没符号索引、没跳转、没文档提示。
- 务必通过
File → Open Folder打开整个项目根目录(含deps.edn或project.clj) -
deps.edn至少要有{:paths ["src"]},否则插件识别不出源码位置 - 右下角状态栏出现
ClojureSublimed: indexing…时别急着跳转,等它变成ready - 跳转定义前,先在 REPL 里执行
(require 'your.ns),否则符号未加载,Ctrl+Click 无效
clj -M:nrepl 启动那一刻起,所有后续功能(求值、跳转、补全)才开始生效——这个手动步骤没法绕,也最容易被忽略。
