如何查找Swift REPL的命令历史记录

如何查找Swift REPL的命令历史记录,swift,read-eval-print-loop,Swift,Read Eval Print Loop,我一直在Swift REPL(在macOS上)中输入命令,而不是向后滚动查看我的命令历史记录,我想知道是否有一个文件或数据库可以像在其他REPL(例如python)中一样保存历史记录,我可以查看 这可用吗?Swift REPL(它实际上以REPL模式启动lldb调试器) 使用libedit进行命令行编辑和历史记录。退出时,历史记录保存到文件~/.lldb/lldb repl history (比较) 弄清历史应该不太难 libedit源代码中的文件格式。下面是一个简单的例子。 在REPL会话之后

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

这可用吗?

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

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

$ swift Welcome to Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42). Type :help for assistance. 1> let a = 1 a: Int = 1 2> let b = 2 b: Int = 2 3> print(a + b) 3 4> ^D $swift 欢迎使用苹果Swift版本3.1(swiftlang-802.0.53 clang-802.0.42)。类型:帮助寻求帮助。 1> 设a=1 a:Int=1 2> 设b=2 b:Int=2 3> 打印(a+b) 3. 4> ^D 历史文件包含

_HiStOrY_V2_ let\040a\040=\0401\012 let\040b\040=\0402\012 print(a\040+\040b)\012 _历史2_ 设\040a\040=\0401\012 让\040b\040=\0402\012 打印(a\040+\040b)\012
@马丁R:但是你可以访问历史上早期课程的条目。我想我的下一个问题是我们如何将其翻译成可读的格式,但谢谢你@我不知道libeditmacos使用的是哪一个版本,但这里有一个版本的历史。c:。可以看到,C库函数strvis/strunvis用于转义/取消转义输入行。空格被八进制转义序列替换。有几个请求“保存”当前的REPL会话。大多数请求需要的东西实际上是一个有效的swift文件,这非常困难,因为您可以执行swift文件中不合法的所有操作(重新定义类等)。那些请求已经停止了。。。但是,一个简单的“转储我在这个会话中键入的文本”命令应该非常容易实现。请随时在bugs.swift.org上提交此增强请求,或者如果您感到有冒险精神,请尝试自己破解它!