Clojure Sublimed
Sublime Text 4 的 Clojure 支持
详细信息
安装
- 总数 2K
- Win 409
- Mac 1K
- Linux 496
8月6日 | 8月5日 | 8月4日 | 8月3日 | 8月2日 | 8月1日 | 7月31日 | 7月30日 | 7月29日 | 7月28日 | 7月27日 | 7月26日 | 7月25日 | 7月24日 | 7月23日 | 7月22日 | 7月21日 | 7月20日 | 7月19日 | 7月18日 | 7月17日 | 7月16日 | 7月15日 | 7月14日 | 7月13日 | 7月12日 | 7月11日 | 7月10日 | 7月9日 | 7月8日 | 7月7日 | 7月6日 | 7月5日 | 7月4日 | 7月3日 | 7月2日 | 7月1日 | 6月30日 | 6月29日 | 6月28日 | 6月27日 | 6月26日 | 6月25日 | 6月24日 | 6月23日 | 6月22日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 1 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 3 | 3 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
Mac | 1 | 2 | 1 | 0 | 0 | 0 | 1 | 0 | 2 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 3 | 1 | 2 |
Linux | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
自述文件
此软件包提供了 Sublime Text 的 Clojure 支持并包含
- Clojure 和 EDN 语法语法(Sublime Text 3+)
- 代码格式化/缩进器(Sublime Text 4075+)
- nREPL、Socket REPL、ShadowCLJS REPL 客户端(Sublime Text 4075+)
安装
包控制:安装软件包
→ Clojure Sublimed
Clojure 语法
Clojure Sublimed 随带 Clojure 和 EDN 的语法定义。与默认的 Clojure 语法不同,此软件包是
- 根据 EDN 规范 和 Clojure Reader 稍显拘谨,
- 经过严格的测试,
- 可以用来突出显示彩虹括号,
- 标点符号和在正则表达式内的验证,
- 带引号和非带引号的区域被标记以突出显示,
- 语义正确的标记化,适用于带有连字符的字体,
- 有独立的 EDN 语法,就像 JSON 是在 Sublime Text 中与 JavaScript 分离一样。
如何启用?将语法分配给 Clojure 文件
- 打开任何 clj/cljc/cljs 文件,
- 运行
查看
→语法
→将当前扩展名所有文件打开为...
→Clojure Sublimed
→Clojure (Sublimed)
。
想测试你的解析器吗?查看 syntax_test_edn.edn 和 syntax_test_clojure.cljc。
格式化/缩进器
Clojure Sublimed 包括对 Simple Clojure 格式化规则 的可选支持。它不需要与 REPL 连接,任何 Clojure 运行时或外部工具。
要重排整个文件,运行 Clojure Sublimed:重排缓冲区
。
要仅重排选定的行,运行 Clojure Sublimed:重排行
。
要在保存时启用重排/格式化,将 format_on_save: true
添加到设置。(查看如何编辑设置)
为了在编写代码时正确缩进,请将 Enter
键重新绑定到 Clojure Sublime: 插入换行
{"keys": ["enter"],
"command": "clojure_sublimed_insert_newline",
"context": [{"key": "selector", "operator": "equal", "operand": "source.edn | source.clojure"},
{"key": "auto_complete_visible", "operator": "equal", "operand": false},
{"key": "panel_has_focus", "operator": "equal", "operand": false}]}
最佳方法是运行 偏好设置:Clojure Sublime 键位绑定
。
REPL 客户端
Clojure Sublime REPL 客户端让您在编辑器中舒适地进行交互式开发。
原则
- 最小干扰。在行内显示评估结果。
- 解耦。评估代码,除此之外没有其他。
特性
- [x] 评估代码
- [x] 在行内显示评估结果
- [x] 在行内显示堆栈跟踪
- [x] 中断评估
- [x] 同时评估多个形式(并行评估)
- [x] 查找符号信息
- [x] 显示评估时间
- [x] 将键绑定到评估任意代码
Clojure Sublime 有四个 REPL 客户端
- 原始 nREPL:没有额外的中间件,可以与任何 nREPL 服务器一起使用。
- JVM nREPL:仅适用于 JVM 服务器。
- ShadowCLJS nREPL:适用于 ShadowCLJS
- JVM Socket REPL:适用于 JVM 上的原始 Socket REPL
所有四个都支持相同的基本功能(评估、在 JVM 上查找、中断),可能实现质量略有不同。
如何选择要使用的 REPL?
- 您在使用 JVM 吗?请使用 Socket REPL。
- 在 JVM 上并且只有 nREPL 吗?请使用 JVM nREPL。
- CLJS 吗?请使用 ShadowCLJS REPL。
- 否则(例如 babashka)请使用原始 nREPL。
我们故意排除了以下功能
- [ ] 自动补全。静态分析比要求始终连接到工作应用要简单得多,并且更可靠。
如果您需要自动补全,请查看 Sublime LSP 与 Clojure LSP 或 SublimeLinter 与 clj-kondo。
如何使用
Clojure 应用
- 运行 Socket 服务器,例如
clj -X clojure.core.server/start-server :name repl :port 5555 :accept clojure.core.server/repl :server-daemon false
或
clj "-J-Dclojure.server.repl={:port 5555 :accept clojure.core.server/repl :server-daemon false}"
- 运行
Clojure Sublimed: 连接到 Socket REPL
命令。
Shadow-cljs 应用
- 运行
shadow-cljs watch app
。(这会启动一个 HTTP 服务器和一个 nREPL) - 如果您正在构建 Web 应用,请在浏览器中打开 http-server 网址(来自步骤 1)。这会将 shadow 服务器连接到 JS 运行时。
- 运行
Clojure Sublimed: 连接到 shadow-cljs
命令。
其他 nREPL 应用
- 运行 nREPL 服务器。
- 运行
Clojure Sublimed: 连接到原始 nREPL
命令。
从缓冲区评估代码
从现在起,您有三个选项
Clojure Sublimed: 评估
(无选择)评估光标附近的最高形式
Clojure Sublimed: 评估
(有选择)评估所选文本
Clojure Sublimed: 评估缓冲区
将评估整个文件
您无需等待一个形式完成评估即可评估其他内容。可以并行执行多个操作
默认情况下,如果评估时间超过 100 毫秒,Clojure Sublimed 也会打印评估时间
复制评估结果
有时您想要复制评估结果。建议将 Cmd+C
/Ctrl+C
从 复制
重新绑定到 sublime_clojure_copy
。这将在评估区域内部复制评估结果,否则回退到默认的 复制
。
中断
如果您的评估运行时间过长并想中断它,请运行 Clojure Sublimed: 中断挂起的评估
打开堆栈跟踪
如果您的评估失败,请将光标放在失败区域内,并运行 Clojure Sublimed: 切换堆栈跟踪
Clojure Sublimed 会以 Clojure 友好的方式显示堆栈跟踪。与默认 REPL 进行比较
监视
监视是替代调试打印的好选择:它们允许您在编辑器中监视函数执行过程中的中间值。
这是它们是如何工作的
- 选择一个右手表达式
- 运行
Clojure Sublimed: 添加监视
命令 - 现在每次函数执行时,无论出于何种原因,监视表达式都会实时显示它们评估出的值。
监视只支持在 Socket REPL 中使用。
查找符号
要显示符号信息,运行 Clojure Sublimed: 切换符号信息
通用的 Clojure Sublimed: 切换信息
命令根据上下文可以充当 切换堆栈跟踪
或 切换符号信息
。
将按键绑定到自定义代码
每个项目都不同,有时候需要频繁地运行一段代码,您可能希望将其绑定到快捷键。这可能是一个命名空间重新加载、测试执行、数据库重新连接、代码检查器、格式化器——可能性无限。
为了支持此类用例,Clojure Sublimed 允许您将任意代码片段绑定到键盘快捷键。运行 首选项:Clojure Sublimed 快捷键绑定
并添加如下内容
{"keys": ["ctrl+t"],
"command": "clojure_sublimed_eval_code",
"args": {"code": "(clojure.test/run-all-tests)"}}
然后,每次您按下 Ctrl + T,您都会在状态栏中看到结果,如下所示
其他可能的用例(选择您要链接的键组合)
只运行当前命名空间下的测试
{"keys": ["ctrl+shift+t"],
"command": "clojure_sublimed_eval_code",
"args": {"code": "(clojure.test/run-all-tests (re-pattern (str *ns*)))"}}
使用 clj-reload 重新加载代码
{"keys": ["ctrl+r"],
"command": "clojure_sublimed_eval_code",
"args": {"code": "(clj-reload.core/reload)"}}
在评估前转换代码
您还可以修改评估以在光标下/选中区域运行代码的转换版本。
例如,这将将评估结果美化和输出到 stdout
{"keys": ["ctrl+p"],
"command": "clojure_sublimed_eval",
"args": {"transform": "(doto %code clojure.pprint/pprint)"}}
transform
是一个格式字符串,它接受选定的形式,根据描述的规则格式化它,然后将生成的代码发送到评估。
如果您现在在一个像 (+ 1 2)
这样的表达式中按下 ctrl+p
,实际发送到 REPL 的评估将是
(doto (+ 1 2) clojure.pprint/pprint)
这将美化和将评估结果输出到 stdout。这种模式对于不适合内联的大型结果可能很有用。
我们可以用这种方式实现扩展宏展开
{"keys": ["ctrl+e"],
"command": "clojure_sublimed_eval",
"args": {"transform": "(macroexpand-1 '%code)",
"expand": true}}
另一个用例可能是“评估到缓冲区”
{"keys": ["ctrl+b"],
"command": "chain",
"args": {
"commands": [
["clojure_sublimed_eval", {"transform": "(with-open [w (clojure.java.io/writer \"/tmp/sublimed_output.edn\")] (doto %code (clojure.pprint/pprint w)))"}],
["open_file", {"file": "/tmp/sublimed_output.edn"}]
]
}
}
评估到缓冲区的工作方式
在 transform
中,您还可以使用 %ns
(当前命名空间)和 %symbol
(如果选定的形式是 def
-something,它将被替换为定义的名称,否则为 nil
)。
这允许我们实现“在光标下运行测试”
{"keys": ["super+shift+t"],
"command": "clojure_sublimed_eval",
"args": {"transform": "(clojure.test/run-test-var #'%symbol)"}}
在光标下运行测试的工作方式
清除结果
最后,要清除评估结果,运行 Clojure Sublimed: 清除评估结果
。
编辑设置
要编辑设置,运行 首选项:Clojure Sublimed 设置
命令。
会话级设置
有时我们需要为整个会话设置动态的 Clojure 变量。为此,编辑 "eval_shared"
设置。例如
"eval_shared": "(do (set! *warn-on-reflection* true) (set! *print-namespace-maps* false))"
这将被应用到每个评估中。
默认按键绑定
Clojure Sublimed 默认没有启用按键绑定,以确保它们不会与其他扩展(Sublime Text 的限制)冲突。
这是推荐的关键映射
命令 | macOS | Windows/Linux | 助记符 |
---|---|---|---|
评估 | Ctrl Enter | Ctrl Alt Enter | |
评估缓冲区 | Ctrl B | Ctrl Alt B | [B]uffer |
中断挂起的评估 | Ctrl C | Ctrl Alt C | [C]ancel |
切换信息 | Ctrl I | Ctrl Alt I | [I]nfo |
清除评估结果 | Ctrl L | Ctrl Alt L | c[L]ear |
复制评估结果 | Command C | Ctrl C | [C]opy |
重新缩进行 | Ctrl F | Ctrl Alt F | [F]ormat |
重新缩进缓冲区 | Ctrl Shift F | Ctrl Alt Shift F | 大写的 [F]ormat |
要设置它,请运行 首选项:Clojure Sublimed 快捷键绑定
命令并将示例快捷键复制到您本地的快捷键绑定文件中。
stdout/stderr
当涉及stdout时,Clojure Sublimed的处理方式略有不同。通常REPL会向你展示所有源于你session的stdout及stderr。我觉得这很令人困惑,因为它并不总是有效,并且你需要检查两个地方才能找到输出。此外,没有输出面板,因此没有地方显示stdout。
因此,Clojure Sublimed 不 重新定向stdout或stderr。查看原始控制台以查看打印了什么。
常见问题
问:REPL/eval不工作
答:请确保你使用的是nREPL 0.9或更高版本。另外,检查控制台(Cmd `)以查找错误。
问:如何连接到Babashka REPL?
答:使用原始nREPL。
致谢
由Niki Tonsky制作。
由Jaihindh Reddy和KgOfHedgehogs贡献。
另请参阅
Writer Color Scheme:一种针对长篇写作优化的颜色方案。
Alabaster Color Scheme:一种用于编码的最简颜色方案。
Sublime Profiles:配置切换器。