Sublime如何配置Clojure语言支持?(Lisp方言开发)

ctrl+enter没反应是因为未配置repl;需安装leiningen或clojure-cli,用clojuresublimed插件指定clojure_cmd路径并手动启动nrepl。

Sublime如何配置Clojure语言支持?(Lisp方言开发)

安装Clojure插件后为什么Ctrl+Enter没反应?

Sublime Text 默认不带 Clojure 运行时,装了插件只是语法高亮和基础命令,没配 REPL 就没法执行代码。Ctrl+Enter(或 Cmd+Enter)触发的是「发送当前表达式到 REPL」,不是本地求值。

实操建议:

  • 先装好 Leiningenclojure-cli(推荐后者,更轻量),确保终端里能跑 clj -M 启动 REPL
  • 再装插件:SublimeREPL + ClojureSublimed(后者更现代,支持 nREPL 1.10+)
  • ClojureSublimed 需要手动指定 leinclj 路径,在插件设置里填 "clojure_cmd": ["clj", "-M"]
  • 启动 REPL 必须用插件命令:Ctrl+Shift+P → 输入 ClojureSublimed: Start nREPL,别指望自动连

ns声明后函数不补全、跳转失效怎么办?

ClojureSublimed 的符号索引依赖项目根目录下的 deps.ednproject.clj。没识别到项目结构,就当纯文本处理,自然没语义补全。

实操建议:

  • 打开整个项目文件夹(File → Open Folder),不是单个 .clj 文件
  • 确认根目录有 deps.edn(哪怕空的也行),内容至少含 {:paths ["src"]}
  • 补全延迟常见,等右下角状态栏出现 ClojureSublimed: indexing… 完成后再试
  • 跳转失败大概率是符号未被加载:在 REPL 里先 (require 'your.ns),再 Ctrl+Click 才生效

写完defnTab没展开参数模板?

这是 Sublime 的 snippet 行为,和 Clojure 插件无关。默认 Clojure 包没开这个 snippet,或者被其他插件(比如 Emmet)劫持了 Tab 键。

实操建议:

  • 手动触发:输入 defn 后按 Ctrl+Space 呼出补全菜单,选 defn (with docstring)
  • 想用 Tab 展开,去 Preferences → Package Settings → ClojureSublimed → Settings,加一行:"enable_snippets": true
  • 如果仍冲突,检查是否有其它插件绑定了 Tab(比如 AutoFileName),临时禁用测试
  • 自定义 snippet 更可靠:新建 Packages/User/clojure-defn.sublime-snippet,内容填入标准 defn 模板

Windows 下中文路径导致clj启动失败报错Cannot run program "clj"

错误本质是 Sublime 的子进程调用不兼容 Windows 的中文环境变量或路径空格。不是 Clojure 本身的问题,而是 clojure_cmd 配置没做转义或封装。

实操建议:

  • 绝对不用中文路径放项目或工具——把 clj 安装到 C: oolsclojure 这类纯英文路径
  • 配置里改用完整路径:"clojure_cmd": ["C:/tools/clojure/clj.bat", "-M"](注意斜杠方向)
  • 如果必须用中文用户名,改 Sublime 的启动方式:右键快捷方式 → 属性 → 目标末尾加 --safe-mode,排除其它插件干扰
  • 终极方案:用 WSL2,clj 在 Linux 环境下跑得稳,Sublime 通过 wsl$ 访问项目

真正卡住的地方往往不是语法或插件功能,而是 REPL 连接状态是否真实活跃、项目结构是否被正确识别、以及 Windows 对空格和中文路径那套老毛病有没有被绕过去。