Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IEx - How to cancel multiline command?

Tags:

elixir

When I use IEx and make a typo like additional bracket or ", then most of the time I get a syntax error. But there are cases like this one:

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    

I cannot make a syntax error and continue from scratch and I have to relaunch entire IEx. Is there any keyboard shortcut or command to skip performing current iex(3) and go to next iex(4)?

like image 713
4d2025 Avatar asked Dec 21 '14 16:12

4d2025


2 Answers

Start your line with #iex:break

iex(1)> Enum.each '12345', &(IO.puts(&1"))     ...(1)> ... ...(1)> #iex:break  ** (TokenMissingError) iex:1: incomplete expression 
like image 150
sasajuric Avatar answered Oct 30 '22 12:10

sasajuric


In general, you can also press Ctrl + G, which will drop you into to the "User switch command" mode with a ---> prompt. From here, you can type i to interrupt your IEx session, then c to reconnect to it; IEx will then state ** (EXIT) interrupted and return to the state it was in immediately before you got stuck. This is a feature of Erlang's shell (erl) that was inherited by IEx.

Example of this in action:

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)>  
like image 35
YellowApple Avatar answered Oct 30 '22 12:10

YellowApple