Kết quả đánh giá số học trong vùng đệm, không phải vùng dội


10

Windows 10, Emacs 25.1

Tôi muốn thực hiện một số phép toán số học Tôi làm điều này: nhập mô tả hình ảnh ở đây

Kết quả là trong vùng echo, nhưng tôi muốn kết quả nằm ở vị trí con trỏ trong bộ đệm. Một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Làm thế nào để tôi làm điều này?


Đó có phải là một "sẽ không"? Nếu có, Emacs có thể là biên tập viên sai cho bạn ...
wasamasa

Emacs không sai biên tập viên cho tôi. Tôi sử dụng nó nhiều năm. Xin lỗi vì tiếng Anh của tôi. Đó không phải là ngôn ngữ mẹ đẻ của tôi.
dùng8542613

Tôi có một chức năng trong cấu hình emacs của tôi mà tôi nghĩ rằng tôi đã nhận được từ dưới cùng của bài viết này .
ShreevatsaR

Nếu bạn đang ở trong *scratch*bộ đệm, C-jsẽ đánh giá biểu thức trước con trỏ và đặt giá trị của biểu thức vào bộ đệm.
gboffi

Câu trả lời:


12

Phiên bản ngắn: có

Thay vì C-x C-eđể đánh giá biểu thức, cung cấp cho nó một đối số tiền tố. C-u C-x C-esẽ in đầu ra ra bộ đệm.

Làm thế nào tôi tìm thấy thông tin này

Bạn có thể điều tra cách Emacs thực hiện những điều này bằng cách xem trong hướng dẫn hoặc tự hỏi Emacs.

Để xem những gì một keybinding cụ thể làm, bạn có thể sử dụng C-h k ( describe-key). Bạn đang đánh giá biểu thức với C-x C-evà bạn có thể tìm ra những gì mà keybinding gọi với C-h k C-x C-e. Điều đó sẽ hiển thị chuỗi doc của lệnh, phần đầu tiên là:

C-x C-echạy lệnh eval-last-sexp(tìm thấy trong bản đồ toàn cầu), là một hàm Lisp được biên dịch tương tác trong elisp-mode.el.

Nó bị ràng buộc với C-x C-e.

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

Đánh giá sexp trước điểm; giá trị in trong khu vực tiếng vang. Tương tác, với một -đối số không tiền tố, in đầu ra vào bộ đệm hiện tại.

...

Tôi đã nhấn mạnh cụm từ chính: cung cấp cho nó một đối số tiền tố ( C-u) sẽ in đầu ra ra bộ đệm, thay vì vùng echo.


2
Điều đó tốt, nhưng nó không đủ. Nếu tôi sử dụng lệnh C-u C-x C-e, kết quả sẽ là (* 60 3) 180 . Nhưng tôi chỉ cần 180 (như trong ảnh chụp màn hình của tôi).
dùng8542613

1
@ user8542613: sau đó bạn sẽ cần phải viết lệnh của riêng bạn.
Dan

1
@ user8542613: Tôi nghĩ câu trả lời của Drew thực hiện chính xác những gì bạn muốn. Vui lòng xem xét chuyển đổi câu trả lời được chấp nhận.
Dan

6

Ràng buộc điều này với một số chìa khóa.

(defun foo ()
  "Replace sexp before point by result of its evaluation."
  (interactive)
  (let ((result  (pp-to-string (eval (pp-last-sexp) lexical-binding))))
    (delete-region (save-excursion (backward-sexp) (point)) (point))
    (insert result)))

3

Nếu bạn muốn thực hiện một phép toán số học và chèn giá trị vào bộ đệm, nhưng không quan tâm bạn thực hiện thao tác đó ở đâu, thì bạn cũng có thể thực hiện C-u M-:và nhập thông tin thao tác của bộ thu nhỏ.

Đây diễn đàn

(defun eval-and-replace (value)
  "Evaluate the sexp at point and replace it with its value"
  (interactive (list (eval-last-sexp nil)))
  (kill-sexp -1)
  (insert (format "%S" value)))

1

Tôi thích thực hiện (cũng phức tạp) tính toán trong calc của Emacs C-x * *và sau đó sao chép kết quả của nó vào bộ đệm nơi con trỏ của tôi ở cùng y, qđóng bộ đệm calc và tôi quay lại vị trí này.

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.