ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

Clojure Sublimed

tonsky ST4

Sublime Text 4 的 Clojure 支持

标签 clojure, repl, nrepl

详细信息

安装

  • 总数 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

自述文件

源代码
raw.githubusercontent.com

此软件包提供了 Sublime Text 的 Clojure 支持并包含

  • Clojure 和 EDN 语法语法(Sublime Text 3+)
  • 代码格式化/缩进器(Sublime Text 4075+)
  • nREPL、Socket REPL、ShadowCLJS REPL 客户端(Sublime Text 4075+)

安装

包控制:安装软件包Clojure Sublimed

Clojure 语法

Syntaxes

Clojure Sublimed 随带 Clojure 和 EDN 的语法定义。与默认的 Clojure 语法不同,此软件包是

  • 根据 EDN 规范Clojure Reader 稍显拘谨,
  • 经过严格的测试,
  • 可以用来突出显示彩虹括号,
  • 标点符号和在正则表达式内的验证,
  • 带引号和非带引号的区域被标记以突出显示,
  • 语义正确的标记化,适用于带有连字符的字体,
  • 有独立的 EDN 语法,就像 JSON 是在 Sublime Text 中与 JavaScript 分离一样。

如何启用?将语法分配给 Clojure 文件

  • 打开任何 clj/cljc/cljs 文件,
  • 运行 查看语法将当前扩展名所有文件打开为...Clojure SublimedClojure (Sublimed)

想测试你的解析器吗?查看 syntax_test_edn.ednsyntax_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 客户端

  1. 原始 nREPL:没有额外的中间件,可以与任何 nREPL 服务器一起使用。
  2. JVM nREPL:仅适用于 JVM 服务器。
  3. ShadowCLJS nREPL:适用于 ShadowCLJS
  4. JVM Socket REPL:适用于 JVM 上的原始 Socket REPL

所有四个都支持相同的基本功能(评估、在 JVM 上查找、中断),可能实现质量略有不同。

如何选择要使用的 REPL?

  1. 您在使用 JVM 吗?请使用 Socket REPL。
  2. 在 JVM 上并且只有 nREPL 吗?请使用 JVM nREPL。
  3. CLJS 吗?请使用 ShadowCLJS REPL。
  4. 否则(例如 babashka)请使用原始 nREPL。

我们故意排除了以下功能

  • [ ] 自动补全。静态分析比要求始终连接到工作应用要简单得多,并且更可靠。

如果您需要自动补全,请查看 Sublime LSPClojure LSPSublimeLinterclj-kondo

如何使用

Clojure 应用

  1. 运行 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}"
  1. 运行 Clojure Sublimed: 连接到 Socket REPL 命令。

Shadow-cljs 应用

  1. 运行 shadow-cljs watch app。(这会启动一个 HTTP 服务器和一个 nREPL)
  2. 如果您正在构建 Web 应用,请在浏览器中打开 http-server 网址(来自步骤 1)。这会将 shadow 服务器连接到 JS 运行时。
  3. 运行 Clojure Sublimed: 连接到 shadow-cljs 命令。

其他 nREPL 应用

  1. 运行 nREPL 服务器。
  2. 运行 Clojure Sublimed: 连接到原始 nREPL 命令。

从缓冲区评估代码

从现在起,您有三个选项

Clojure Sublimed: 评估(无选择)评估光标附近的最高形式

Evaluate Topmost

Clojure Sublimed: 评估(有选择)评估所选文本

Evaluate Selection

Clojure Sublimed: 评估缓冲区将评估整个文件

Evaluate Buffer

您无需等待一个形式完成评估即可评估其他内容。可以并行执行多个操作

Evaluate in Parallel

默认情况下,如果评估时间超过 100 毫秒,Clojure Sublimed 也会打印评估时间

Elapsed time

复制评估结果

有时您想要复制评估结果。建议将 Cmd+C/Ctrl+C复制 重新绑定到 sublime_clojure_copy。这将在评估区域内部复制评估结果,否则回退到默认的 复制

中断

如果您的评估运行时间过长并想中断它,请运行 Clojure Sublimed: 中断挂起的评估

Interrupt

打开堆栈跟踪

如果您的评估失败,请将光标放在失败区域内,并运行 Clojure Sublimed: 切换堆栈跟踪

Toggle Stacktrace

Clojure Sublimed 会以 Clojure 友好的方式显示堆栈跟踪。与默认 REPL 进行比较

Stacktraces

监视

监视是替代调试打印的好选择:它们允许您在编辑器中监视函数执行过程中的中间值。

这是它们是如何工作的

  • 选择一个右手表达式
  • 运行 Clojure Sublimed: 添加监视 命令
  • 现在每次函数执行时,无论出于何种原因,监视表达式都会实时显示它们评估出的值。

监视只支持在 Socket REPL 中使用。

查找符号

要显示符号信息,运行 Clojure Sublimed: 切换符号信息

Toggle Symbol Info

通用的 Clojure Sublimed: 切换信息 命令根据上下文可以充当 切换堆栈跟踪切换符号信息

将按键绑定到自定义代码

每个项目都不同,有时候需要频繁地运行一段代码,您可能希望将其绑定到快捷键。这可能是一个命名空间重新加载、测试执行、数据库重新连接、代码检查器、格式化器——可能性无限。

为了支持此类用例,Clojure Sublimed 允许您将任意代码片段绑定到键盘快捷键。运行 首选项:Clojure Sublimed 快捷键绑定 并添加如下内容

{"keys":    ["ctrl+t"],
 "command": "clojure_sublimed_eval_code",
 "args":    {"code": "(clojure.test/run-all-tests)"}}

然后,每次您按下 Ctrl + T,您都会在状态栏中看到结果,如下所示

Eval Code

其他可能的用例(选择您要链接的键组合)

只运行当前命名空间下的测试

{"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。查看原始控制台以查看打印了什么。

Stdout redirect

常见问题

问:REPL/eval不工作

答:请确保你使用的是nREPL 0.9或更高版本。另外,检查控制台(Cmd `)以查找错误。


问:如何连接到Babashka REPL

答:使用原始nREPL。

致谢

Niki Tonsky制作。

Jaihindh ReddyKgOfHedgehogs贡献。

另请参阅

Writer Color Scheme:一种针对长篇写作优化的颜色方案。

Alabaster Color Scheme:一种用于编码的最简颜色方案。

Sublime Profiles:配置切换器。

许可证

MIT许可