Pry und Vim

Veröffentlicht von Ramon Voges am 03.01.2017 4 Minuten zum Lesen

Wie testet man elegant komplexere Code-Abschnitte, ohne gleich ein vollständiges Programm zu schreiben? In diesem Beitrag erkläre ich, wie sich pry, eine interaktive Ruby Shell, mit dem Texteditor vim verträgt.

Was sind REPLs?

Um Ideen für Programme oder einzelne Code-Schnipsel in Ruby auszuprobieren, bietet sich irb an, die Interaktive Ruby Shell. Dabei handelt es sich um eine sogenannte REPL, also eine “read-evaluate-print loop”. Diese Lesen-Auswerten-Schreiben-Schleife erlaubt es, interaktiv Code einzugeben und die Ergebnisse unmittelbar auf der Kommandozeile in Augenschein zu nehmen.

irb ist ohne Frage der Klassiker unter den REPLs für Ruby, aber nicht die einzige. Eine sehr mächtige Alternative ist pry. pry erlaubt es nicht nur, interaktiv Ruby-Code einzugeben und auszuführen, sondern ermöglicht auch den Zugriff auf die Shell, verfügt über Syntax Highlighting, erlaubt das Aufrufen der Ruby-Dokumentation mit ri und bietet eine Verlaufsgeschichte der einzelnen Eingaben.

pry bringt außerdem eine Funktion mit, über die irb nur mithilfe eines Umwegs verfügt: die Möglichkeit, aus dem REPL auf einen Editor zuzugreifen.

REPL oder Editor? REPL und Editor!

Dank des Vim Cast Running Vim within irb von Drew Neil bin ich darauf aufmerksam geworden, dass sich ein Editor innerhalb von irb aufrufen lässt, indem man das gem interactive_editor installiert und in der .irbrc einbindet.

Das ist insbesondere dann von Nutzen, wenn man längere Code-Abschnitte eingibt, dann aber einzelne Zeilen überarbeiten möchte, ohne den ganzen Rest erneut eintippen zu müssen. Anders gesagt, die Möglichkeit, aus einem REPL einen Editor aufzurufen, bietet eine Balance aus Interaktion mit dem Code und komfortablem Editieren.

Vim in pry

Ein kurzer Blick in die Dokumentation von pry zeigt: pry bietet diese Funktion gleich von Hause aus.

Das REPL lässt sich mit gem install pry installieren. Man ruft es aus der Kommandozeile mit dem Befehl pry auf. Anschließend kann mit dem Coden losgelegt werden.

[1] pry(main)> (1..15).each do |i|
[1] pry(main)*   if i%3 == 0 && i%5 == 0
[1] pry(main)*     puts 'FizzBuzz'
[1] pry(main)*   elsif i%3 == 0
[1] pry(main)*     puts 'Fizz'
[1] pry(main)*   elsif i%5 == 0
[1] pry(main)*     puts 'Buzz'
[1] pry(main)*   else
[1] pry(main)*     puts i
[1] pry(main)*   end
[1] pry(main)* end
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
=> 1..15
[2] pry(main)>

Hat man die REPL von der Kommandozeile aus mit dem Befehl pry gestartet, lässt sich ein Editor mit edit aufrufen. pry greift dafür auf die Shell-Variable $EDITOR zurück, die in der jeweiligen Dotfile der Shell definiert wird. Ist kein Editor angegeben, ruft pry Nano auf.

Möchte man einen anderen Editor nutzen, lässt sich mithilfe des Kommandos Pry.config.editor der Lieblingseditor festlegen. Bei mir verweist beispielsweise $EDITOR auf mvim. Das heißt, immer wenn ein Programm von der Kommandozeile einen Editor aufruft, startet MacVim. Das Terminal aber jedesmal zu verlassen, wenn ich aus pry einen Editor aufrufe, scheint mir unsinnig zu sein. Deswegen habe ich in der Datei ~/.pryrc den Befehl Pry.config.editor="vim" eingetragen. Auf diese Weise wird statt mvim immer vim gestartet, wenn ich mit edit einen Editor aus pry aufrufe.

Zusammenfassung

Eigentlich schließen sich einander REPL und Editor aus. Ein REPL wie irb oder pry dient nämlich dafür, gerade kein vollständiges Programm zu schreiben, sondern nur Code-Schnipsel testweise laufen zulassen und die Ausgabe gleich zu überprüfen. Einen Editor aufzurufen macht aber dann Sinn, wenn es um etwas komplexere Ausschnitte geht, die getestet werden sollen. Hierfür sind pry und vim ein perfektes Paar.