IEx - ¿Cómo cancelar el comando multilínea?

82

Cuando uso IEx y cometo un error tipográfico como corchete adicional o ", la mayoría de las veces obtengo un error de sintaxis. Pero hay casos como este:

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   

No puedo cometer un error de sintaxis y continuar desde cero y tengo que reiniciar el IEx completo. ¿Hay algún método abreviado de teclado o comando para omitir la ejecución del iex actual (3) y pasar al siguiente iex (4)?

4d2025
fuente
1
las soluciones a esto son bastante molestas, me hubiera gustado que incluyeran una opción en el BREAKmenú para cancelar el comando multilínea actual, o hacer que el primer ctrl-c lo cancele ...
erandros

Respuestas:

95

Comienza tu línea con #iex:break

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

** (TokenMissingError) iex:1: incomplete expression
sasajúrico
fuente
4
Esto se menciona en la documentación, en la sección "Expresiones en IEx" (antes de que comience la documentación de funciones): elixir-lang.org/docs/v1.0/iex/IEx.html
alxndr
y ¿cómo se interrumpe un comando de larga duración y se lo cancela?
Thomas Browne
Oh cielos ... buscando nuevamente el expansor de texto ... smilesoftware.com/textexpander lo abreviará a;iexb
arcseldon
62

En general, también puede presionar Ctrl+ G, lo que lo llevará al modo "Comando de cambio de usuario" con un --->mensaje. Desde aquí, puede escribir ipara interrumpir su sesión IEx y luego cvolver a conectarse; IEx luego indicará ** (EXIT) interruptedy volverá al estado en el que estaba inmediatamente antes de que se atascara. Esta es una característica del shell de Erlang (erl) que fue heredada por IEx.

Ejemplo de esto en acción:

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)> 
AmarilloApple
fuente
0

Mi solución rápida y sucia es producir un error de sintaxis con spamming """""""""(que se interpretará como heredoc).

En tu ejemplo:

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 """
pzmarzly
fuente