đánh giá biểu thức Lisp


2

Tôi đã chạy lệnh sau từ dòng lệnh mong đợi nhận được 5(kết quả của biểu thức), nhưng thay vào đó tôi nhận được một số thông báo lỗi về "chức năng của biểu tượng không được xác định".

emacs -e "(+ 2 3)"

Vì vậy, tôi đã làm gì sai? Cách chính xác để nhanh chóng đánh giá một biểu thức mà không cần phải thực sự mở emacs là gì?

Cảm ơn

Câu trả lời:


4

Những gì bạn đang tìm kiếm là Emacs' chế độ hàng loạt , trong đó chỉ thị Emacs để thực hiện chương trình Lisp nhất định (dù do -l FILE, -f FUNCTIONhay --eval FORM), và sau đó thoát ra. Từ tài liệu tham khảo GNU Emacs Lisp :

Tùy chọn dòng lệnh '-batch' khiến Emacs chạy không tương tác. Trong chế độ này, Emacs không đọc các lệnh từ thiết bị đầu cuối, nó không thay đổi các chế độ thiết bị đầu cuối và nó không mong đợi được xuất ra màn hình có thể xóa được. Ý tưởng là bạn chỉ định các chương trình Lisp để chạy; khi chúng kết thúc, Emacs sẽ thoát. Cách chỉ định các chương trình để chạy là với '-l tệp', tải tệp có tên thư viện hoặc '-f function', gọi hàm không có đối số hoặc '- dạng biểu mẫu'.

Bất kỳ đầu ra chương trình Lisp nào thường đi đến vùng echo, sử dụng tin nhắn hoặc sử dụng prin1, v.v., với t là luồng, thay vào đó là mô tả lỗi tiêu chuẩn của Emacs khi ở chế độ hàng loạt. Tương tự, đầu vào thường xuất phát từ bộ thu nhỏ được đọc từ bộ mô tả đầu vào tiêu chuẩn. Do đó, Emacs hoạt động giống như một chương trình ứng dụng không tương tác. (Đầu ra khu vực tiếng vang mà chính Emacs thường tạo ra, chẳng hạn như tiếng vang lệnh, bị triệt tiêu hoàn toàn.)

Và cho một ví dụ nhanh:

me@host $ emacs -batch --eval '(message (format "1+2 equals %d" (+ 1 2)))'
1+2 equals 3
me@host $ 

2

Nếu bạn đang sử dụng GNU Emacs, thì cú pháp cho tùy chọn dòng lệnh đánh giá một sexp là đây (từ hướng dẫn sử dụng Emacs, nút Action Arguments):

`--eval=EXPRESSION'
`--execute=EXPRESSION'
     Evaluate Lisp expression EXPRESSION.

Đó là, bạn có thể sử dụng --eval=...hoặc --execute=.... AFAIK, bạn không thể sử dụng -e....

Tuy nhiên, bạn có thể sử dụng -e...(hoặc --eval) với emacsclient. Ví dụ:emacsclient -e (text-mode)

(Tốt nhất là chỉ định thông báo lỗi chính xác mà bạn nhận được, cũng như phiên bản Emacs của bạn, để nhận được nhiều trợ giúp nhất.)

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.