IEx - 如何取消多行命令?

4d2*_*025 70 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   
Run Code Online (Sandbox Code Playgroud)

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

sas*_*ric 82

开始你的路线 #iex:break

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

** (TokenMissingError) iex:1: incomplete expression
Run Code Online (Sandbox Code Playgroud)

  • 这在文档的"IEx中的表达式"一节中提到(在函数文档开始之前):http://elixir-lang.org/docs/v1.0/iex/IEx.html (3认同)

小智 53

通常,您也可以按Ctrl+ G,这将使您进入"用户切换命令"模式并显示--->提示.从这里,您可以键入i以中断您的IEx会话,然后c重新连接到它; 然后IEx会** (EXIT) interrupted在你被卡住之前立即声明并返回到它所处的状态.这是IEx继承的Erlang shell(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)> 
Run Code Online (Sandbox Code Playgroud)


pzm*_*zly 11

我的快速而肮脏的解决方案是通过垃圾邮件产生语法错误"""""""""(这将被解释为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 """
Run Code Online (Sandbox Code Playgroud)