IEx - Як скасувати багаторядкову команду?


84

Коли я використовую 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)?


2
рішення цього досить дратують, я хотів би, щоб вони включили в BREAKменю опцію скасувати поточну багаторядкову команду або зробити перший ctrl-c скасувати її ...
erandros

Відповіді:


95

Почніть свою лінію з #iex:break

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

** (TokenMissingError) iex:1: incomplete expression

4
Про це згадується в документації, у розділі "Вирази в IEx" (до того, як починається документація щодо функцій): elixir-lang.org/docs/v1.0/iex/IEx.html
alxndr

і як перервати тривалу команду і скасувати її?
Томас Браун,

О, дорогий .. Знову потягнувшись до розширювача тексту ... smilesoftware.com/textexpander скорочуватиме це до;iexb
arcseldon

63

Загалом, ви також можете натиснути Ctrl+ G, що переведе вас у режим "Команда перемикання користувачів" із --->підказкою. Звідси ви можете ввести, iщоб перервати сеанс IEx, а потім cзнову підключитися до нього; Потім IEx визначить ** (EXIT) interruptedі повернеться до стану, в якому він був, безпосередньо перед тим, як ви застрягли. Це особливість оболонки Erlang (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)> 

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 """
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.