IEx - Làm cách nào để hủy lệnh multiline?


82

Khi tôi sử dụng IEx và mắc lỗi đánh máy như thêm dấu ngoặc hoặc ", thì hầu hết thời gian tôi gặp lỗi cú pháp. Nhưng có những trường hợp như sau:

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   

Tôi không thể mắc lỗi cú pháp và tiếp tục từ đầu và tôi phải khởi chạy lại toàn bộ IEx. Có phím tắt hoặc lệnh nào để bỏ qua thực hiện iex hiện tại (3) và chuyển đến iex tiếp theo (4) không?


1
các giải pháp này là khá khó chịu, tôi muốn họ bao gồm một tùy chọn trong BREAKmenu để hủy bỏ lệnh multiline hiện tại, hoặc làm cho Ctrl-C đầu tiên hủy nó ...
erandros

Câu trả lời:


95

Bắt đầu dòng của bạn với #iex:break

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

** (TokenMissingError) iex:1: incomplete expression

4
Điều này được đề cập trong tài liệu, trong phần "Biểu thức trong IEx" (trước khi tài liệu về hàm bắt đầu): elixir-lang.org/docs/v1.0/iex/IEx.html
alxndr

và làm thế nào để ngắt một lệnh đang chạy dài và hủy nó?
Thomas Browne

Ôi trời ơi .. đạt cho giãn nở văn bản một lần nữa ... smilesoftware.com/textexpander phải viết tắt đó để;iexb
arcseldon

62

Nói chung, bạn cũng có thể nhấn Ctrl+ G, thao tác này sẽ đưa bạn vào chế độ "Lệnh chuyển đổi người dùng" với --->lời nhắc. Từ đây, bạn có thể nhập iđể ngắt phiên IEx của mình, sau đó ckết nối lại với nó; Sau đó IEx sẽ trạng thái ** (EXIT) interruptedvà trở lại trạng thái như trước khi bạn gặp khó khăn. Đây là một tính năng của trình bao Erlang (erl) được IEx kế thừa.

Ví dụ về điều này trong hành động:

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

Giải pháp nhanh chóng và bẩn thỉu của tôi là tạo ra lỗi cú pháp bằng cách gửi thư rác """""""""(sẽ được hiểu là heredoc).

Trong ví dụ của bạn:

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 """
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.