Search code examples
elixirelixir-iex

How do I save IEx history?


With IEx (Elixir's REPL), I'd like to be able to save my command history.

For example:

I can open up a new IEx session and execute a command. After executing the command I can press the up arrow and have my last-command pre-populated. After closing IEx and re-opening, I'd like to have access to my last commands.

Is there a way to do this?


Solution

  • For Erlang/OTP 20

    This is built-in (from https://hexdocs.pm/iex/IEx.html#module-shell-history)

    From Erlang/OTP 20, it is possible to get shell history by passing some flags that enable it in the VM. This can be done on a per-need basis when starting IEx:

    iex --erl "-kernel shell_history enabled"

    If you would rather enable it on your system as a whole, you can use the ERL_AFLAGS environment variable and make sure that it is set accordingly on your terminal/shell configuration.

    On Linux [and macOS]:

    export ERL_AFLAGS="-kernel shell_history enabled"

    On Windows:

    set ERL_AFLAGS "-kernel shell_history enabled"

    To show where the history file is located, run the following code from erl (Mac OS example value shown):

    1> filename:basedir(user_cache, "erlang-history")
    "/Users/your.username/Library/Caches/erlang-history"
    

    To set the file to a different location, use the shell_history_path /path/to/history-file option from the erlang docs (compatible with Elixir/iex):

    export ERL_AFLAGS="-kernel shell_history_path '\"$HOME/.erlang-history\"'"
    

    For Erlang/OTP 19 and below

    Try using https://github.com/ferd/erlang-history

    > git clone https://github.com/ferd/erlang-history.git
    > cd erlang-history
    > sudo make install    # may not need sudo depending on installation