IEx-如何取消多行命令?


82

当我使用IEx并像其他方括号或“这样的拼写错误时,大多数时候我都会遇到语法错误。但是在某些情况下,会出现以下情况:

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   

我不能犯语法错误,不能从头开始,必须重新启动整个IEx。是否有任何键盘快捷键或命令可跳过执行当前iex(3)并转到下一个iex(4)?


1
解决方案非常烦人,我希望它们在BREAK菜单中包含一个选项来取消当前的多行命令,或者使第一个ctrl-c取消它……
erandros

Answers:



62

通常,您还可以按Ctrl+ G,这会提示您进入“用户切换命令”模式--->。在这里,您可以键入i中断IEx会话,然后c重新连接到该会话;然后** (EXIT) interrupted,IEX将声明并返回到您被卡住之前的状态。这是由IEx继承的Erlang外壳(erl)的功能。

此操作的示例:

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

我的快速又肮脏的解决方案是通过垃圾邮件产生语法错误"""""""""(将其解释为heredoc)。

在您的示例中:

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 """
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.