Kasus penggunaan klasik:
- Anda mulai merekam makro:
C-x (
- Anda melakukan beberapa hal, katakanlah
hello
. - Anda menjalankan perintah yang melempar kesalahan, katakanlah
C-g
(mis. Anda salah menjalankanC-s
dan Anda harus membatalkannya denganC-g
, sekarang pekerjaan Anda hilang).
Sekarang rekaman Anda sejauh ini hilang.
Saya ingin melanjutkan di mana saya tinggalkan sebelum saya menjalankan perintah yang mengganggu rekaman saya. Saya melihat C-h f start-kbd-macro
, tapi itu ditulis dalam C, jadi saya tidak bisa men-tweak itu. Saya juga mencari-cari variabel suka current-kbd-macro
, tetapi sejauh ini tidak menemukan.
Bisakah itu dipulihkan?
Memperbarui:
Saya tidak tahu mengapa C-u C-x (
tidak bekerja untuk saya, tetapi saya menemukan itu karena saya mengujinya C-g
.
Ternyata itu C-g
istimewa - jika Anda memicu jenis kesalahan yang berbeda misalnya
C-x ( M-: (signal 'quit nil)
Maka ini akan menghentikan rekaman, tetapi last-kbd-macro
akan berisi "M-: M-( signal 'quit nil"
, tetapi dengan
C-x ( C-g
Ini berhenti merekam dan membuang apa pun yang direkam. Sebagai pengguna Cg-happy (seperti setidaknya dua dari teman saya), ini adalah perbedaan yang agak disayangkan. Saya mencoba mengedit keyboard-quit
, tetapi tidak ada yang bisa saya lakukan di sana.
Sepertinya satu-satunya cara untuk memulihkan ini adalah melalui recent-keys
dan secara otomatis mencari tahu di mana start-kbd-macro (atau serupa) dipanggil, seperti pada kmacro-edit-lossage
.
sumber
Jalankan
kmacro-start-macro-or-insert-counter
dengan awalan (C-u
) untuk menambahkan ke makro sebelumnya.sumber
C-u C-u
) set kedua denganAPPEND
danNO-EXEC
argumen untukstart-kbd-macro
, yang memungkinkan Anda menambahkan tanpa replay awal dari makro-begitu-jauh. Perilaku ini didokumentasikan dalam manual, namun:(emacs) Basic Keyboard Macro
Menggabungkan jawaban yang baik dari stsquad dan artagnon memberikan (dalam pikiran saya) solusi total untuk masalah yang sepenuhnya masuk akal:
Mungkin kebutuhan untuk mengedit kerugian-sebagai-makro tidak ideal , tetapi (a) Anda harus mengedit makro terlepas, jika Anda membatalkan rekaman, dan (b) ini seharusnya tidak terlalu sering terjadi, jika Anda hanya ingat bagaimana cara menghentikan makro secara normal (misalnya dengan <f4>daripada C-g).
Tidak ada yang mengatakan bahwa itu tidak akan berguna jika makro yang dibatalkan dibatalkan di suatu tempat; hanya saja saya tidak berpikir ini benar-benar terjadi. Mungkin layak M-x
report-emacs-bug
untuk menyarankan fitur ini.sumber
Solusi kanonik adalah C-x C-k C-e(
kmacro-edit-macro
) yang akan memungkinkan Anda untuk melangkah melalui setiap tombol-tekan dan masukkan / hapus apa pun yang Anda inginkan. Sintaks perintah untuk editor sedikit singkat tetapi?
akan memunculkan panduan. Ada editor yang lebih alami terikat ke C-x C-k e(edit-kbd-macro
) yang memberikan editor makro teks biasa dengan komentar.Opsi lain adalah M-x
insert-kbd-macro
yang akan memungkinkan Anda untuk mengedit makro sebagai Lisp tetapi itu bukan hal yang paling mudah dibaca di dunia.Sejauh variabel yang Anda cari
last-kbd-macro
dankmacro-ring
.Seperti yang Anda sebutkan Anda belum menyelesaikan makro Anda, Anda bisa membuatnya dari kerugian Anda. C-x C-k e C-h ldan hapus hingga 300 karakter sebelumnya.
sumber
last-kbd-macro
ataukmacro-ring
mengandung tombol ditekan sebelumC-g
atau kesalahan terjadi. Saya secara khusus menempatkan INCOMPLETE dalam huruf kapital semua dalam judul saya mengantisipasi jawaban buruk seperti itu. Terima kasih telah mencoba membantu.C-x C-k e C-h l
edit,,C-c C-c
kemudianC-u f3
untuk melanjutkan perekaman (mencatat bahwa yang terakhirf3
akan pertama-tama memutar makro sejauh ini sebelum menunggu masukan lebih lanjut). Mungkin kebutuhan untuk mengedit kerugian-sebagai-makro tidak ideal , tetapi (a) Anda harus mengedit makro terlepas, jika Anda membatalkan rekaman, dan (b) ini seharusnya tidak terlalu sering terjadi, jika Anda hanya ingat bagaimana menghentikan makro secara normal.