25

私は Elixir を使い始めたばかりで、iexシェルをかなり使用しています。「セッション」をファイルに保存/記録することはできますか?

ありがとうございました。

4

2 に答える 2

46

Erlang/OTP-20 以降

Erlang/OTP-20rc2 以降、このライブラリの Erlang/OTP コード ベースへのポートを通じて、シェルの履歴がすぐにサポートされます (ただし、最初はデフォルトで無効になっています) 。環境変数に追加してshell_historyカーネル環境変数を有効に設定することにより、これらのバージョンでシェルを有効にします (詳細なオプションについては、構成オプションを参照してください)。export ERL_AFLAGS="-kernel shell_history enabled"

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

トラブルシューティング

履歴が更新されていないようです(ファイルに書き込まれていません)?

履歴をファイルに書き込んでいるプロセスは非同期で実行されているようで、IEx シェルが閉じられるまでに時間がかかるようです。シェルを終了する前に、少し待つ必要があります (たとえば、 を押し<ctrl+\>ます)。


Erlang/OTP-20 以前:

私はそれを行う2つの方法を見つけました。

1.アーランの歴史

erlang-history (eh) は、Erlang-OTP システムにパッチを適用して、Erlang シェルで履歴のサポートを追加するために使用できる小さなファイルのペアです。

サポートされている履歴は、キーボードの上下矢印で利用できるものです。

Ubuntu Linux へのインストール:

sudo su
cd /usr/local/src
git clone https://github.com/ferd/erlang-history.git
cd erlang-history
make install

現在、Erlang ベースの REPL (およびそれが IEx) を開始するたびに、 を使用する必要がありますerlang-history


2.ラップ

別の方法として、 「readline ラッパー」である、より一般的な REPL エンハンサー/フィクサーrlwrapを試すことができます。

...GNU readline ライブラリを使用して、任意のコマンドのキーボード入力を編集できる小さなユーティリティ。

rlwrap -a -A iex -S mix

(Ubuntu Linux を使用している場合: sudo apt-get install rlwrap)

これにより、REPL にさらに多くの機能を追加rlwrap -a -z pipeto iexできます。たとえば、パイプをシェル コマンドに渡すことができる pipeto フィルターなどです。ドキュメントを読むのに非常にiex> h Stream | less便利です

欠点を知る:

  • IEx でコード補完 (つまり、タブ補完) を中断します

この非常に便利な機能 (コマンド履歴) が Elixir/Erlang にまだ含まれていないのはなぜですか?


ご利用の際はこちらasdfをご覧ください。

于 2015-02-14T09:51:25.783 に答える
10

現在ありません。ただし、これを行うために小さな iex プラグインを作成することもできます。たとえば、次のファイルが にあります~/.iex.exs

# .iex.exs
defmodule IExHelpers do
  def reload! do
    Mix.Task.reenable "compile.elixir"
    Mix.Task.run "compile.elixir"
  end
end

iex = IExHelpers


# $ iex -S mix
# iex(2)> iex.reload!
# :noop

これは、現在のプロジェクトを再コンパイルし、iex -S mix. おそらく、現在のシェルの履歴をファイルに保存するために何かを書き、起動時にそれを読み戻すことができますが、どこから始めればよいかわかりません。

于 2014-03-15T22:01:22.820 に答える