Apakah ada (repeat-last-command) di Emacs?


143

Seringkali, saya menggali apropos dan dokumen mencari sesuatu seperti berikut hanya untuk menyerah untuk kembali ke tugas yang ada:

(repeat-last-command)

lakukan perintah C- atau M- terakhir yang baru saja saya jalankan (untuk kembali ke kunci fn)

atau terkadang terkait:

(jelaskan-fungsi terakhir)

apa keystroke yang saya keliru mengeluarkan, efek yang ingin saya tambahkan ke tas trik saya. kunci uraian dekat, tetapi membutuhkan mengetahui apa yang saya ketik.

Apakah saya hanya meminta terlalu banyak dari sahabat karib saya yang terpercaya?


1
Cx z (repeat)dan Cx Mz (repeat-complex-command). Lihat juga (repeat-matching-complex-command).
Hatshepsut

Jawaban:


62

berkaitan dengan ' uraikan-fungsi-terakhir ':

Ada variabel last-commandyang diatur ke simbol yang mewakili hal terakhir yang Anda lakukan. Jadi potongan kecil ini - (describe-function last-command)- harus memunculkan dokumentasi untuk hal yang segera terjadi.

Jadi Anda bisa membuat hal sepele bekerja describe-last-functionseperti itu

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

Masukkan elisp itu ke dalam .emacsatau setara, dan Anda akan memiliki Mx menggambarkan-fungsi terakhir .

Jika Anda menggedor beberapa tombol atau melakukan sesuatu yang mengubah perintah terakhir sejak Anda tertarik, command-historyfungsinya mungkin menarik. Anda bisa mendapatkannya dengan Mx command-history


168

Fungsi berulang disediakan oleh repeat.elpaket Emacs Lisp, yang disertakan dengan distribusi Emacs standar. Dari repeat.eldokumentasi:

Paket ini mendefinisikan perintah yang mengulangi perintah sebelumnya, apa pun itu, termasuk argumennya, apa pun itu. Perintah ini terhubung ke tombol Cx z. Untuk mengulangi perintah sebelumnya satu kali, ketikkan Cx z. Untuk mengulanginya untuk kedua kalinya segera setelah itu, ketikkan saja z. Dengan mengetikkan z berulang kali, Anda dapat mengulangi perintah itu berulang-ulang.

Untuk melihat informasi tambahan tentang perintah repeat, ketik C-h F repeat RETdari dalam Emacs.



81

Ya, ada perintah berulang . Disebut repeat:

  • Anda dapat mengulangi perintah dengan C-x z, dan tekan zuntuk terus mengulangi.

Sedikit mengejutkan tidak ada yang disebutkan repeat-complex-command, tersedia dari kunci yang mengikat C-x ESC ESC.


2
mirip dengan Mx Mp kecuali perintah repeat-complex-repeat mengulangi argumen sebelumnya.
Yoo

5
Juga aktif C-x M-:(mnemonik: suka M-:tetapi dengan ekspresi elisp sudah diisi untuk Anda).
phils

6
Ya, memang mengejutkan . Jawaban yang diterima bukanlah jawaban terbaik di sini, IMO (tetapi OP tampaknya merasa itu sesuai dengan pertanyaannya). Bagi saya, jawaban ini paling dekat dengan apa yang ditanyakan pertanyaan tertulis (ulangi perintah terakhir). Dan kemungkinan-kemungkinan yang ditawarkan oleh repeat.el(yang termasuk C-x z z z...) adalah yang terdekat kedua. Dengan pertanyaan kedua yang diajukan, tentang penekanan tombol mana yang ditekan terakhir, jawaban terbaik adalah C-h l( view-lossage). Ada sedikit penggunaan, IMHO, untuk sebuah describe-last-commandperintah.
Drew

Anda juga dapat menggunakan C-x M-:sebagai bagian dari makro keyboard, yang bisa berguna. repeat-complex-commandBinding default agak terlalu rumit untuk mengetik berulang-ulang.
remubber

24

Juga, M-x view-lossagemenunjukkan kepada Anda seratus (?) Penekanan tombol yang Anda masukkan. Jadi, Anda akan dapat melihat di mana perintah itu berada. Itu yang saya gunakan sampai sekarang saya tahu tentang M-x command-historyyang saya pikir saya akan gunakan C-h wsekarang.


18

Saya tidak begitu yakin, tapi mungkin Anda mencari yang ini?

Perintah C-xz( repeat) menyediakan cara lain untuk mengulangi perintah Emacs berkali-kali. Perintah ini mengulangi perintah Emacs sebelumnya, apa pun itu. Mengulangi perintah menggunakan argumen yang sama yang digunakan sebelumnya; itu tidak membaca argumen baru setiap kali.

Manual Emacs, 8.11 Mengulang Perintah


2
dan seperti dicatat oleh Johannes Schaub, tekanan-tekanan berikutnya zdengan sendirinya akan melanjutkan pengulangan.
phils

9

Mungkin ini akan membantu juga ... Dari emacs Bantuan kata demi kata:

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

Secara pribadi saya menemukan ide Sebastian berguna. Ini adalah versi yang berfungsi

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

2
Mempertimbangkan itu isearchdan isearch-backwardmerupakan perintah navigasi yang penting, dan bahwa yang terakhir terikat ke <kbd> Cr </kbd> secara default, orang mungkin bisa menemukan ikatan yang lebih baik untuk perintah-ulang. Pada Mac, saya sarankan Command (super) -Y, karena beberapa aplikasi sudah memiliki konvensi menggunakan itu sebagai kebalikan dari 'undo'.
Brighid McDonnell

0

Ini sudah tua, tetapi Google muncul memposting ini pertama ketika saya mencari untuk mengambil perintah terakhir yang saya ketik di prompt Emacs. Tidak satu pun dari jawaban ini yang bekerja untuk saya, jadi saya memutuskan untuk memasukkan dua sen saya untuk mereka yang mungkin tersandung nanti seperti yang saya lakukan. Saya menggunakan Portacle, tetapi saya menemukan apa yang saya cari di sini jadi saya berharap itu cukup umum untuk bekerja dengan pengaturan yang berbeda. Lagi pula, apa yang berhasil bagi saya adalah menggunakan C-↑dan C-↓untuk menelusuri sejarah. Menggunakan M-pdan M-nbekerja dengan baik, tapi saya lebih suka menggunakan panah karena saya menggunakan Bash sedikit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.