如何设置Sublime Text以运行Clojure Lisp方言代码?

2026-05-07 13:151阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计952个文字,预计阅读时间需要4分钟。

如何设置Sublime Text以运行Clojure Lisp方言代码?

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+PConvert Indentation to Spaces,再手动删残留 字符(用 Ctrl+Shift+PFind: Show All Characters 显式查看)
  • Parinfer 插件慎用:它会自动重排括号结构,新手易被带偏;Clojure 插件自带 rainbow parentheses 已够用

补全/跳转失效?大概率是没打开项目文件夹

Clojure 插件(如 Conjure、ClojureSublimed)的语义分析依赖项目结构。只打开单个 .clj 文件,插件就当纯文本处理,自然没符号索引、没跳转、没文档提示。

  • 务必通过 File → Open Folder 打开整个项目根目录(含 deps.ednproject.clj
  • deps.edn 至少要有 {:paths ["src"]},否则插件识别不出源码位置
  • 右下角状态栏出现 ClojureSublimed: indexing… 时别急着跳转,等它变成 ready
  • 跳转定义前,先在 REPL 里执行 (require 'your.ns),否则符号未加载,Ctrl+Click 无效
真正的 Clojure 开发体验不在“能不能跑”,而在“能不能交互调试”。从 clj -M:nrepl 启动那一刻起,所有后续功能(求值、跳转、补全)才开始生效——这个手动步骤没法绕,也最容易被忽略。
标签:Sublime

本文共计952个文字,预计阅读时间需要4分钟。

如何设置Sublime Text以运行Clojure Lisp方言代码?

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+PConvert Indentation to Spaces,再手动删残留 字符(用 Ctrl+Shift+PFind: Show All Characters 显式查看)
  • Parinfer 插件慎用:它会自动重排括号结构,新手易被带偏;Clojure 插件自带 rainbow parentheses 已够用

补全/跳转失效?大概率是没打开项目文件夹

Clojure 插件(如 Conjure、ClojureSublimed)的语义分析依赖项目结构。只打开单个 .clj 文件,插件就当纯文本处理,自然没符号索引、没跳转、没文档提示。

  • 务必通过 File → Open Folder 打开整个项目根目录(含 deps.ednproject.clj
  • deps.edn 至少要有 {:paths ["src"]},否则插件识别不出源码位置
  • 右下角状态栏出现 ClojureSublimed: indexing… 时别急着跳转,等它变成 ready
  • 跳转定义前,先在 REPL 里执行 (require 'your.ns),否则符号未加载,Ctrl+Click 无效
真正的 Clojure 开发体验不在“能不能跑”,而在“能不能交互调试”。从 clj -M:nrepl 启动那一刻起,所有后续功能(求值、跳转、补全)才开始生效——这个手动步骤没法绕,也最容易被忽略。
标签:Sublime