IEx - Jak anulować polecenie wielowierszowe?


84

Kiedy używam IEx i popełniam literówkę, taką jak dodatkowy nawias lub ”, przez większość czasu pojawia się błąd składniowy. Ale są przypadki takie jak ten:

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   

Nie mogę popełnić błędu składniowego i kontynuować od zera i muszę ponownie uruchomić całe IEx. Czy jest jakiś skrót klawiaturowy lub polecenie, aby pominąć wykonywanie bieżącego iex (3) i przejść do następnego iex (4)?


2
rozwiązania tego są dość denerwujące, żałuję, że nie mają w BREAKmenu opcji anulowania bieżącego polecenia wielowierszowego lub wykonania pierwszego ctrl-c anulowania go ...
erandros

Odpowiedzi:


95

Rozpocznij swoją linię od #iex:break

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

** (TokenMissingError) iex:1: incomplete expression

4
Jest to wspomniane w dokumentacji, w sekcji „Wyrażenia w IEx” (przed rozpoczęciem dokumentacji funkcji): elixir-lang.org/docs/v1.0/iex/IEx.html
alxndr

i jak można przerwać długo działające polecenie i anulować je?
Thomas Browne

Ojej ... znowu sięgam po ekspander tekstu ... smilesoftware.com/textexpander skracam to do;iexb
arcseldon

63

Ogólnie rzecz biorąc, możesz także nacisnąć Ctrl+ G, co spowoduje przejście do trybu „Polecenie zmiany użytkownika” z --->monitem. Tutaj możesz wpisać, iaby przerwać sesję IEx, a następnie cponownie się z nią połączyć; IEx następnie wskaże ** (EXIT) interruptedi powróci do stanu, w którym był bezpośrednio przed utknięciem. Jest to cecha powłoki Erlanga (erl), która została odziedziczona przez IEx.

Przykład tego w akcji:

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

Moim szybkim i brudnym rozwiązaniem jest wygenerowanie błędu składniowego przez spamowanie """""""""(co zostanie zinterpretowane jako heredoc).

W twoim przykładzie:

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 """
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.