clojure-lsp在sublime中不能即装即用,必须先启动nrepl、禁用tab缩进、确保deps.edn存在且以文件夹打开项目,否则跳转、补全、hover等功能全部失效。

Clojure-lsp 在 Sublime Text 里不能“即装即用”,必须先连上 nREPL、禁用 tab、确保 deps.edn 存在,否则所有 LSP 功能(跳转、补全、hover)基本失效。
clojure-lsp 插件本身不启动服务,得手动起 nREPL
clojure-lsp 是语言服务器,不是运行时。它需要连接一个已启动的 nREPL 进程来获取项目上下文和符号信息。Sublime 里装了 clojure-lsp 插件但没看到补全或跳转?大概率是 nREPL 根本没跑起来。
- 终端进项目根目录(必须有
deps.edn),运行clojure -M:nrepl(确认deps.edn里定义了:nrepl别名) - 别用
lein repl—— clojure-lsp 对它的兼容性差,常连不上或断连 - 检查日志是否输出类似
Started nREPL server on port 5555;端口被占就改插件配置里的:port - Sublime 启动后,
Ctrl+Shift+P→ 输入ClojureSublimed: Start nREPL(不是 SublimeREPL),这是客户端连接动作
缩进错一位,LSP 就看不到 ns 和 defn
Clojure 缩进是语义的一部分,clojure-lsp 依赖正确的结构解析命名空间和函数定义。它不会报错,但 Ctrl+Click 跳不到定义、hover 显示 unknown、require 报 Unable to resolve symbol —— 全是缩进惹的祸。
- 关闭自动检测:
"detect_indentation": false(加在Preferences → Settings – Syntax Specific,且右下角显示为 Clojure 语法) - 强制设死:
"tab_size": 4和"translate_tabs_to_spaces": true - 已有文件含 tab?全选 →
Ctrl+Shift+P→Convert Indentation to Spaces,再用Ctrl+Shift+P→Find: Show All Characters手动删残留→
Sublime 拿不到 clj 命令,LSP 直接哑火
插件配置里写的 "clojure_cmd": ["clj", "-M"] 在终端能跑,但在 Sublime 里报 command not found —— 不是路径写错了,是 Sublime 启动时压根没继承 shell 的 PATH。
- macOS/Linux:别从 Dock 点开 Sublime,改用终端执行
subl或open -a "Sublime Text" --args - Windows:把
clj.bat放到纯英文无空格路径(如C:/tools/clojure/clj.bat),并在插件设置中填完整路径:"clojure_cmd": ["C:/tools/clojure/clj.bat", "-M"] - 验证方法:
Ctrl+`打开 Python 控制台,输入import os; os.environ.get("PATH"),确认输出含clj所在目录
LSP 补全/跳转失效,优先查项目结构识别
clojure-lsp 需要正确识别项目根和源码路径才能索引符号。如果 deps.edn 缺失、:paths 没配、或 Sublime 没以文件夹方式打开项目,LSP 就像盲人摸象。
- 项目根目录必须存在
deps.edn,哪怕只写{:paths ["src"]} - 确保 Sublime 是通过
File → Open Folder…打开整个项目文件夹,不是单个.clj文件 - 检查插件日志(通常在
Console或插件专用 panel)是否有Failed to resolve project root或No source paths found - 避免混用构建工具:
project.clj和deps.edn同时存在时,clojure-lsp 默认只认后者;若要用 Leiningen,得显式配置插件的:build-tool
真正卡住人的从来不是插件装不装得上,而是 nREPL 没启、PATH 没继承、缩进没锁死、项目没以文件夹打开——这四点漏掉任一,clojure-lsp 就只是个摆设。











