2

我可以使用相应的箭头键上下移动历史记录,但这对于大量历史记录来说很麻烦,而且CTRL-R似乎不起作用。

查看了Erlang 的shell模块Elixir 的IEx模块文档,但他们没有提到任何关于此的内容。后者至少告诉如何启用它

可以通过传递一些在 VM 中启用它的选项来获取 shell 历史记录。这可以在启动 IEx 时根据需要完成:

iex --erl "-kernel shell_history enabled"

如果您希望在整个系统上启用它,您可以使用ERL_AFLAGS环境变量并确保在您的终端/shell 配置中相应地设置它。

在类 Unix / Bash 上:

export ERL_AFLAGS="-kernel shell_history enabled"

在 Windows 上:

set ERL_AFLAGS "-kernel shell_history enabled"

在 Windows 10 / PowerShell 上:

$env:ERL_AFLAGS = "-kernel shell_history enabled"
4

2 回答 2

3

引用Erlang 补丁邮件列表中所说的内容

可以通过按 ctrl-r 进入搜索模式。输入术语并再次按 ctrl-r 向后搜索,或 ctrl-s 然后向前搜索(如果您的终端没有吃掉那个)。

值得注意的是,OP 提到 ctrl-r 不起作用,并且链接的消息对 Windows 环境也有同样的说法。根据环境的不同,此功能似乎有一些警告。

很难详细说明 OP 的情况,但 FWIW,该功能确实按照 macOS 10.14、iTerm2 和 Elixir 1.10.4-otp-22 中的描述工作。

于 2020-11-19T18:15:36.260 回答
2

一个快速而肮脏的解决方案:

  1. 由于可以通过 Erlang 的标志启用历史记录,因此文档kernel中找到了以下标志:kernel

    shell_history = enabled | disabled
    指定在使用erl.

    shell_history_drop = [string()]
    不应保留的特定日志行。例如["q().", "init:stop()."]将允许忽略关闭节点的命令。默认为[].

    shell_history_file_bytes = integer()
    shell 应该记住多少字节。默认情况下,该值设置为 512kb,最小值为 50kb。

    shell_history_path = string()
    指定将存储 shell 历史文件的位置。默认为由 . 返回的用户缓存目录filename:basedir(user_cache, "erlang-history")

  2. 查找 shell 历史文件的路径iex

    iex(27)> :filename.basedir(:user_cache, "erlang-history")             
    "/home/user/.cache/erlang-history"
    
  3. less在系统外壳中使用

    $ ll /home/user/.cache/erlang-history/
    total 100
    drwxr-xr-x  2 user users  4096 Aug 18 07:59 ./
    drwxr-xr-x 14 user users  4096 Aug  2 15:52 ../
    -rw-r--r--  1 user users 52415 Aug 10 08:13 erlang-shell-log.1
    -rw-r--r--  1 user users 29992 Aug 18 08:00 erlang-shell-log.2
    -rw-r--r--  1 user users    26 Aug 18 07:59 erlang-shell-log.idx
    -rw-r--r--  1 user users    13 Aug 18 07:59 erlang-shell-log.siz
    
    $ less /home/user/.cache/erlang-history/erlang-shell-log.1
    "/home/user/.cache/erlang-history/erlang-shell-log.1" may be a binary file.  
    See it anyway?
    # Hit y
    

我确信有更复杂的方法,但没有时间探索它们,也找不到任何专门从iex(或erl)查询历史的项目。

于 2019-08-18T15:30:02.143 回答