IEx - 如何取消多行命令?

问题描述 投票:0回答:3

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

elixir
3个回答
128
投票

#iex:break

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

** (TokenMissingError) iex:1: incomplete expression

这记录在 Elixir 的 IEx 文档中 IEx 中的表达式部分


78
投票

一般情况下,您也可以按 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)> 

12
投票

我的快速而肮脏的解决方案是通过垃圾邮件产生语法错误

"""""""""
(这将被解释为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 """
© www.soinside.com 2019 - 2024. All rights reserved.