IEx - Wie kann ein mehrzeiliger Befehl abgebrochen werden?


82

Wenn ich IEx verwende und einen Tippfehler wie eine zusätzliche Klammer oder "mache, erhalte ich meistens einen Syntaxfehler. Aber es gibt Fälle wie diesen:

iex(3)> Enum.each '12345', &(IO.puts(&1"))    
...(3)> end   
...(3)> )   
...(3)> '    
...(3)> end    
...(3)> ""    
...(3)> ... ? How to produce syntax error ?    
...(3)>     
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded    
      (v)ersion (k)ill (D)b-tables (d)istribution   

Ich kann keinen Syntaxfehler machen und von Grund auf fortfahren und muss den gesamten IEx neu starten. Gibt es eine Tastenkombination oder einen Befehl, um die Ausführung des aktuellen IEX (3) zu überspringen und zum nächsten IEX (4) zu wechseln?


1
Die Lösungen dafür sind ziemlich ärgerlich. Ich wünschte, sie hätten eine Option in das BREAKMenü aufgenommen, um den aktuellen mehrzeiligen Befehl abzubrechen oder die erste Strg-C-Taste zum Abbrechen zu bringen ...
Erandros

Antworten:


95

Beginnen Sie Ihre Linie mit #iex:break

iex(1)> Enum.each '12345', &(IO.puts(&1"))    
...(1)> ...
...(1)> #iex:break

** (TokenMissingError) iex:1: incomplete expression

4
Dies wird in der Dokumentation im Abschnitt "Ausdrücke in IEx" erwähnt (bevor die Funktionsdokumentation beginnt): elixir-lang.org/docs/v1.0/iex/IEx.html
alxndr

und wie unterbricht man einen lang laufenden Befehl und bricht ihn ab?
Thomas Browne

Oh je ... greife wieder nach Text Expander ... smilesoftware.com/textexpander soll das abkürzen;iexb
arcseldon

62

Im Allgemeinen können Sie auch Ctrl+ drücken G, wodurch Sie mit einer --->Eingabeaufforderung in den Modus "Benutzerwechselbefehl" versetzt werden . Von hier aus können iSie eingeben, um Ihre IEx-Sitzung zu unterbrechen und dann erneut ceine Verbindung herzustellen . IEx gibt dann an ** (EXIT) interruptedund kehrt zu dem Zustand zurück, in dem es sich unmittelbar vor dem Feststecken befand. Dies ist eine Funktion von Erlangs Shell (erl), die von IEx geerbt wurde.

Beispiel dafür in Aktion:

iex(3)> Enum.each '12345', &(IO.puts(&1"))
...(3)> end
...(3)> )
...(3)> '
...(3)> end
...(3)> ""
...(3)>        <-- Ctrl-G goes here (not shown normally)
User switch command
 --> i
 --> c
** (EXIT) interrupted
iex(3)> 

0

Meine schnelle und schmutzige Lösung besteht darin, durch Spam einen Syntaxfehler zu erzeugen """""""""(der als Heredoc interpretiert wird).

In Ihrem Beispiel:

iex(3)> Enum.each '12345', &(IO.puts(&1"))
...(3)> end
...(3)> '
...(3)> end
...(3)> ""
...(3)> """"""""""""""""""""
** (SyntaxError) iex:8: heredoc allows only zero or more whitespace characters followed by a new line after """
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.