IEx - 如何取消多行命令?

时间:2014-12-21 16:36:49

标签: elixir

当我使用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)?

3 个答案:

答案 0 :(得分:76)

使用#iex:break

开始您的话题
iex(1)> Enum.each '12345', &(IO.puts(&1"))    
...(1)> ...
...(1)> #iex:break

** (TokenMissingError) iex:1: incomplete expression

答案 1 :(得分:50)

通常,您也可以按 Ctrl + G ,这将使您进入"用户切换命令"带有--->提示的模式。在这里,您可以输入i来中断您的IEx会话,然后c重新连接到它;然后IEx将陈述** (EXIT) interrupted并在你被卡住之前立即返回它所处的状态。这是Erlang的shell(erl)的一个功能,它由IEx继承。

此实例示例:

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)> 

答案 2 :(得分: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 """