.pryrcに設定を追加することで、最後に入力したコマンドを再実行できます。
# ~/.pryrcやプロジェクト下の.prycに以下を定義する
# Hit Enter to repeat last command
Pry::Commands.command /^$/, "repeat last command" do
_pry_.run_command Pry.history.to_a.last
end
実行例
pry> s # ステップ実行
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す
参考
旧記事
以下は、.pryrcを設定する方法ではなく、pry-byebugをムリヤリ書き換える例です。
pry-byebugでは、gdbのようにエンターだけで直前のコマンドを繰り返せないようなので、無理矢理pryをいじって、sncfを繰り返せるようにしてみた。(そもそもpryにそういうオプションがあるのかも?)
やれるようになったこと
pry> s # ステップ実行
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す
## これがs n c fに適用される。
変更箇所
## 属性を2つ追加
attr_accessor :last_line
attr_accessor :repeat_command_names
def initialize
...
@repeat_command_names = "s n c f".split(/\s+/) # オプションにするべき箇所.
end
def handle_line(line, options)
if line.nil?
config.control_d_handler.call(@eval_string, self)
return
end
# ここにコマンドが改行のときに、直前のコマンドが
# 繰り返し対象なら繰り返す処理を追加.
# process_commandに処理を追加するかはちょっと悩んだ...
if line.chomp.empty?
if @repeat_command_names.include?(@last_line)
line = @last_line
end
end
@last_line = line.chomp
# 追加はここまで
ensure_correct_encoding!(line)
Pry.history << line unless options[:generated]
@suppress_output = false
inject_sticky_locals!
begin
if !process_command_safely(line.lstrip)
pry_instance.rbはgithubから取得できます.
反省点...
githubの更新の仕方をよく調べもせずに更新してしまったけど(さすがにmasterではないけど)、良くなかったのではないかと...。他人のリポジトリの変更方法をちゃんと確認すれば良かった。反省。