Ruby の 定番対話ツール pry 徹底攻略 | Editor integration #pry #ruby

# Ruby の 定番対話ツール pry 徹底攻略 | <i class="fa fa-edit" style="font-size:1em;"></i> Editor integration
## :musical_score: 概要
Ruby の 定番対話ツール pry 徹底攻略
<i class="fa fa-edit" style="font-size:1em;"></i> Editor integration について

## <i class="fa fa-edit" style="font-size:1em;"></i> Editor integration
Pry は shell-like なプロンプトを持ち、メソッド名のタブ補完などができる。
しかし、エディタを使いたいこともあるだろう。

## :raised_hand:<i class="fa fa-edit" style="font-size:1em;"></i> Using the edit command
`edit` command でデフォルトのエディタを呼び出します。

### `edit <filename.rb>`
`edit` command は、編集後にあなたが作成したファイルを load します。

~~~
$ pry
[1] pry(main)> edit hoge.rb
~~~

* エディタが起動。下記の内容で編集してエディタを終了する

~~~ruby
class Hoge
  def hoge
    "hoge"
  end
edn

Hoge.new.hoge
~~~

* 自動で load されたことを確認

~~~
[2] pry(main)> Hoge.new.hoge
=> "hoge"
[3] pry(main)>
~~~

* その他の option は `help` command で参照

~~~
[1] pry(main)> edit -h
Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N]

Open a text editor. When no FILE is given, edits the pry input buffer.
When a method/module/command is given, the code is opened in an editor.
Ensure `Pry.config.editor` or `_pry_.config.editor` is set to your editor of choice.

edit sample.rb                edit -p MyClass#my_method
edit sample.rb --line 105     edit MyClass
edit MyClass#my_method        edit --ex
edit --method                 edit --ex -p

https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command

    -e, --ex             Open the file that raised the most recent exception (_ex_.file)
    -i, --in             Open a temporary file containing the Nth input expression. N may be a range (default: -1..-1)
    -t, --temp           Open an empty temporary file
    -l, --line           Jump to this line in the opened file
    -n, --no-reload      Don't automatically reload the edited file
    -c, --current        Open the current __FILE__ and at __LINE__ (as returned by `whereami`)
    -r, --reload         Reload the edited code immediately (default for ruby files)
    -p, --patch          Instead of editing the object's file, try to edit in a tempfile and apply as a monkey patch
    -m, --method         Explicitly edit the _current_ method (when inside a method context).
    -h, --help           Show this message.
~~~

## <i class="fa fa-gears" style="font-size:1em;"></i><i class="fa fa-edit" style="font-size:1em;"></i> Setting the default editor
`Pry.config.editor` に任意のエディタを設定することで、起動するエディタを変更できます。
エディタの設定を nano から vi に変更します。

### pry を起動し、現在のエディタを確認

~~~
$ pry
[1] pry(main)> Pry.config.editor
=> "nano"
[2] pry(main)> edit nano.rb
~~~

### nano で編集

~~~ruby
class Nano
  def nano
    "nano"
  end
end
~~~

### 編集後、 pry に戻り、ファイルが load されている

~~~
[3] pry(main)> Nano.new
=> #<Nano:0x00000603626890>
[4] pry(main)> Nano.new.nano
=> "nano"
[5] pry(main)> exit
$
~~~

### ~/.pryrc でエディタを vi に設定

~~~bash
$ echo 'Pry.config.editor = "vi"' > ~/.pryrc
$ cat ~/.pryrc
Pry.config.editor = "vi"
~~~

### pry を起動し、現在のエディタを確認

~~~
$ pry
[1] pry(main)> Pry.config.editor
=> "vi"
[2] pry(main)> edit vi.rb
[3] pry(main)> Vi.new.vi
=> "vi"
[4] pry(main)> exit
$
~~~

### vi で編集

~~~ruby
class Vi
  def vi
    "vi"
  end
end
~~~

### 編集後、 pry に戻り、ファイルが load されている

~~~
[7] pry(main)> Vi.new
=> #<Vi:0x000006034effa8>
[8] pry(main)> Vi.new.vi
=> "vi"
~~~

## :shell:<i class="fa fa-edit" style="font-size:1em;"></i> Invoking an editor through the shell
<i class="fa fa-external-link-square" style="font-size:1em;"></i> [Shell Integration](http://qiita.com/tbpgr/items/0ed31ce354adb2a14bff)を利用して、エディタを呼び出すこともできます。

~~~
[9] pry(main)> .vi vim.rb
~~~

* vim で編集する

~~~ruby
class Vim
  def vim
    "vim"
  end
end
~~~

* vim 終了後に、作成したファイルからクラスを呼び出す

~~~
[15] pry(main)> require './vim.rb'
=> true
[16] pry(main)> Vim.new
=> #<Vim:0x00000603dfb110>
[17] pry(main)> Vim.new.vim
=> "vim"
~~~

## :man::woman: 親記事
<i class="fa fa-external-link-square" style="font-size:1em;"></i> [Ruby の 定番対話ツール pry 徹底攻略](http://qiita.com/tbpgr/items/12a60f2f9e3de61517b5)

## :books: 外部資料
* <i class="fa fa-external-link" style="font-size:1em;"></i> [pry Wiki | The Editor integration](https://github.com/pry/pry/wiki/Editor-integration)