LoginSignup
8
7

More than 5 years have passed since last update.

pry-byebugのコマンドをエンターで再実行する

Last updated at Posted at 2014-05-05

.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> (改行) #エンターが入力されたら、ステップ実行を繰り返す

参考

deivid-rodriguez/pry-byebug


旧記事

以下は、.pryrcを設定する方法ではなく、pry-byebugをムリヤリ書き換える例です。

pry-byebugでは、gdbのようにエンターだけで直前のコマンドを繰り返せないようなので、無理矢理pryをいじって、sncfを繰り返せるようにしてみた。(そもそもpryにそういうオプションがあるのかも?)

やれるようになったこと

pry> s # ステップ実行
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す
pry> (改行) #エンターが入力されたら、ステップ実行を繰り返す

## これがs n c fに適用される。

変更箇所

pry/lib/pry_instance.rb

## 属性を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ではないけど)、良くなかったのではないかと...。他人のリポジトリの変更方法をちゃんと確認すれば良かった。反省。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7