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.