Có một (lặp lại lệnh cuối cùng) trong Emacs?


143

Thường xuyên, tôi đã đào sâu vào apropos và các tài liệu đang tìm kiếm thứ gì đó giống như sau chỉ từ bỏ để quay lại với nhiệm vụ trong tay:

(lặp lại lệnh cuối)

thực hiện lệnh C- hoặc M- cuối cùng mà tôi vừa thực hiện (để bật lại thành khóa fn)

hoặc đôi khi có liên quan:

(mô tả chức năng cuối cùng)

Tôi đã phát hành nhầm phím, hiệu ứng mà tôi muốn thêm vào túi thủ thuật của mình. Khóa mô tả là gần, nhưng đòi hỏi phải biết những gì tôi đã gõ.

Tôi chỉ đơn giản là yêu cầu quá nhiều từ sidekick đáng tin cậy của tôi?


1
Cx z (repeat)và Cx Mz (repeat-complex-command). Xem thêm (repeat-matching-complex-command).
Hatshepsut

Câu trả lời:


62

liên quan đến ' mô tả-chức năng cuối cùng ':

Có một biến last-commandđược đặt thành đại diện biểu tượng cho điều cuối cùng bạn đã làm. Vì vậy, đoạn trích elisp này - (describe-function last-command)- nên đưa ra tài liệu cho điều ngay lập tức xảy ra.

Vì vậy, bạn có thể làm cho một tầm thường làm việc describe-last-functionnhư vậy

(defun describe-last-function() 
  (interactive) 
  (describe-function last-command))

Đặt elisp đó trong .emacshoặc tương đương, và bạn sẽ có chức năng mô tả Mx cuối cùng .

Nếu bạn đã gõ một vài phím hoặc thực hiện điều gì đó đã sửa đổi lệnh cuối cùng vì điều bạn quan tâm, command-historychức năng có thể được quan tâm. Bạn có thể có được điều đó bởi lịch sử lệnh Mx


168

Chức năng lặp lại được cung cấp bởi repeat.elgói Emacs Lisp, được bao gồm trong các bản phân phối Emacs tiêu chuẩn. Từ repeat.eltài liệu của:

Gói này định nghĩa một lệnh lặp lại lệnh trước đó, bất kể đó là gì, bao gồm các đối số của nó, bất kể chúng là gì. Lệnh này được kết nối với khóa Cx z. Để lặp lại lệnh trước một lần, gõ Cx z. Để lặp lại lần thứ hai ngay sau đó, chỉ cần nhập z. Bằng cách gõ z nhiều lần, bạn có thể lặp lại lệnh nhiều lần.

Để xem thông tin bổ sung về lệnh lặp lại, nhập C-h F repeat RETtừ bên trong Emacs.


160

Lặp lại lệnh cuối cùng

C-xz

Khi bạn nhấn nó, chỉ cần nhấn z sau đó và nó sẽ lặp lại (mà không phải nhấn C-xlại).


Chính xác những gì tôi mong đợi nó sẽ làm.
Vasantha Ganesh K

81

Vâng, có một lệnh lặp lại . Nó được gọi là repeat:

  • Bạn có thể lặp lại các lệnh với C-x zvà nhấn zđể tiếp tục lặp lại.

Một chút sốc không ai đề cập repeat-complex-command, có sẵn từ các ràng buộc quan trọng C-x ESC ESC.


2
tương tự như Mx Mp ngoại trừ lệnh lặp lại phức tạp lặp lại các đối số trước đó.
Yoo

5
Cũng trên C-x M-:(mnemonic: thích M-:nhưng với biểu thức elisp đã được điền cho bạn).
phils

6
Vâng, thực sự gây sốc . Câu trả lời được chấp nhận không phải là câu trả lời tốt nhất ở đây, IMO (nhưng OP dường như cảm thấy nó phù hợp nhất với câu hỏi của cô ấy). Đối với tôi, câu trả lời này là gần nhất với những gì câu hỏi bằng văn bản yêu cầu (lặp lại lệnh cuối cùng). Và các khả năng được cung cấp bởi repeat.el(mà bao gồm C-x z z z...) là gần nhất thứ hai. Viết câu hỏi thứ hai, về lần nhấn phím nào được nhấn lần cuối, câu trả lời hay nhất là C-h l( view-lossage). Có rất ít sử dụng, IMHO, cho một describe-last-commandlệnh.
vẽ

Bạn cũng có thể sử dụng C-x M-:như một phần của macro bàn phím, có thể tiện dụng. Các repeat-complex-commandràng buộc mặc định là một chút quá rườm rà để gõ hơn và hơn.
xe máy

24

Ngoài ra, M-x view-lossagehiển thị cho bạn hàng trăm lần nhấn phím (?) Cuối cùng mà bạn đã nhập. Vì vậy, bạn sẽ có thể thấy lệnh ở đâu. Đó là những gì tôi đã sử dụng cho đến khi tôi phát hiện ra M-x command-historyrằng tôi nghĩ tôi sẽ sử dụng C-h wngay bây giờ.


18

Tôi không thực sự chắc chắn, nhưng có lẽ bạn đang tìm kiếm cái này?

Lệnh C-xz( repeat) cung cấp một cách khác để lặp lại lệnh Emacs nhiều lần. Lệnh này lặp lại lệnh Emacs trước đó, bất kể đó là gì. Lặp lại một lệnh sử dụng các đối số tương tự đã được sử dụng trước đó; nó không đọc các đối số mới mỗi lần.

Hướng dẫn sử dụng Emacs, 8.11 Lặp lại lệnh


2
và như được lưu ý bởi Johannes Schaub, những lần nhấn tiếp theo chỉ zriêng nó sẽ tiếp tục sự lặp lại.
phils

9

Có thể điều này cũng sẽ giúp ... Từ emacs Trợ giúp nguyên văn:

C-x M-ESC runs the command repeat-complex-command
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to <again>, <redo>, C-x M-:, C-x M-ESC.
(repeat-complex-command ARG)

Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
The command is placed in the minibuffer as a Lisp form for editing.
The result is executed, repeating the command as changed.
If the command has been changed or is not the most recent previous command
it is added to the front of the command history.
You can use the minibuffer history commands M-n and M-p
to get different commands to edit and resubmit.

4

Cá nhân tôi thấy ý tưởng của Sebastian hữu ích. Đây là một phiên bản làm việc

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))

2
Xem xét điều đó isearchisearch-backwardlà các lệnh điều hướng quan trọng và theo sau là ràng buộc với <kbd> Cr </ kbd>, người ta có thể tìm thấy một ràng buộc tốt hơn cho lệnh lặp lại. Trên máy Mac, tôi đề xuất Command (super) -Y, vì một số ứng dụng đã có quy ước sử dụng điều đó trái ngược với 'hoàn tác'.
Brighid McDonnell

0

Điều này đã cũ, nhưng Google bật lên đăng bài này đầu tiên khi tôi đang tìm cách lấy lại lệnh cuối cùng mà tôi đã gõ tại dấu nhắc Emacs. Không có câu trả lời nào trong số này làm việc cho tôi vì vậy tôi quyết định đặt hai xu của mình cho những người có thể vấp ngã sau này như tôi đã làm. Tôi đang sử dụng Portacle, nhưng tôi đã tìm thấy những gì tôi đang tìm kiếm ở đây vì vậy tôi hy vọng nó đủ chung để hoạt động với các thiết lập khác nhau. Dù sao, những gì làm việc cho tôi là sử dụng C-↑C-↓xoay quanh lịch sử. Sử dụng M-pM-nlàm việc là tốt, nhưng tôi thích sử dụng các mũi tên vì tôi sử dụng Bash khá nhiều.

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.