【问题标题】:How to find command history of Swift REPL如何查找 Swift REPL 的命令历史记录
【发布时间】:2017-08-03 14:14:08
【问题描述】:

我一直在 Swift REPL(在 macOS 上)中输入命令,而不是向后滚动查看我的命令历史记录,我想知道是否有一个文件或数据库可以像其他 REPL 一样保存历史记录(例如 python ) 我可以看看。

这个可以吗?

【问题讨论】:

  • @Martin R:但是您可以访问历史中早期会话的条目。

标签: swift read-eval-print-loop


【解决方案1】:

Swift REPL(实际上以 REPL 模式启动 lldb 调试器) 使用 libedit 进行命令行编辑和历史记录。退出时,历史记录保存到文件~/.lldb/lldb-repl-history (比较SR-4338 Swift REPL crashes on launch if ~/.lldb/lldb-repl-history contains emoji)。

弄清楚历史应该不会太难 来自 libedit 源代码的文件格式。这是一个简单的例子。 在 REPL 会话之后

$ 迅速 欢迎使用 Apple Swift 3.1 版 (swiftlang-802.0.53 clang-802.0.42)。输入 :help 寻求帮助。 1> 让 a = 1 a: 整数 = 1 2> 让 b = 2 b: 整数 = 2 3> 打印(a + b) 3 4> ^D

历史文件包含

_历史_V2_ 让\040a\040=\0401\012 让\040b\040=\0402\012 打印(a\040+\040b)\012

【讨论】:

  • 我想我的下一个问题是我们如何将它翻译成可读的格式,但谢谢!
  • @WillB:我不知道 macOS 使用哪个 libedit,但这里是 history.c 的一个版本:cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/lib/libedit/…。可以看到 C 库函数 strvis/strunvis 用于转义/取消转义输入行。空格被八进制转义序列替换。
  • 有几个请求要“保存”当前的 REPL 会话。大多数请求都想要一个实际上是有效的 swift 文件的东西,这非常困难,因为您可以做各种在 swift 文件中不合法的事情(重新定义类等)。这些请求已经停止......但是一个简单的“转储我在这个会话中输入的文本”命令应该相当容易实现。请随时在 bugs.swift.org 上提交增强请求,或者如果您喜欢冒险,请尝试自己破解它!
猜你喜欢
  • 2016-01-13
  • 2012-04-15
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多