Emacs'ta (tekrarla-son-komutu) var mı?


143

Sık sık, sadece eldeki göreve geri dönmekten vazgeçmek için aşağıdaki gibi bir şey arayan apropos ve dokümanlara girdim:

(Tekrar-son komutu)

en son yürüttüğüm C veya M komutunu yap (bir fn tuşuna geri dönecek)

veya bazen ilgili:

(Tarif-son fonksiyonu)

hangi tuş vuruşunu yanlış yaptım, bunun etkisini hileler çantama eklemek istiyorum. expla-key yakın, ancak ne yazdığımı bilmeyi gerektirir.

Güvenilir yardımcımdan çok mu fazlasını soruyorum?


1
Cx z (repeat)ve Cx Mz (repeat-complex-command). Ayrıca bakınız (repeat-matching-complex-command).
Hatshepsut

Yanıtlar:


62

' tanımla-son-fonksiyonu ' ile ilgili:

last-commandYaptığınız son şeyin sembol temsilcisine ayarlanmış bir değişken var. Yani bu elisp snippet'i - (describe-function last-command)- hemen olan şey için belgeleri getirmelidir.

Eğer önemsiz bir çalışma yapabiliriz Yani describe-last-functionşöyle

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

Bu elisp'i .emacsveya eşdeğerini koyun, bir Mx açıklama-son işlevine sahip olursunuz .

Birkaç tuşa bastıysanız veya ilgilendiğinizden beri son komutu değiştiren bir şey yaptıysanız, command-historyişlev ilgi çekici olabilir. Bunu Mx komut geçmişiyle alabilirsiniz


168

Tekrarlama işlevi, repeat.elstandart Emacs dağıtımlarına dahil olan Emacs Lisp paketi tarafından sağlanır . Adlı kullanıcının repeat.eldokümanlarından:

Bu paket, argümanları da dahil olmak üzere, önceki komutu tekrar eden bir komutu tanımlar. Bu komut Cx z tuşuna bağlanır. Önceki komutu bir kez daha yinelemek için Cx z yazın. Hemen ardından ikinci kez tekrarlamak için sadece z yazın. Tekrar tekrar z yazarak komutu tekrar tekrar yapabilirsiniz.

Tekrarlama komutu hakkında ek bilgi görmek için C-h F repeat RETEmacs içinden yazın .



81

Evet, bir tekrar komutu var. Adı repeat:

  • Komutları ile tekrarlayabilir C-x zve ztekrarlamaya devam etmek için tuşuna basabilirsiniz .

Biraz şok edici kimse repeat-complex-command, anahtar bağlama mevcut C-x ESC ESC.


2
mx Mp'ye benzer, repeat-complex-komutunun önceki argümanları tekrarlaması dışında.
Yoo

5
Ayrıca C-x M-:(anımsatıcı: gibi M-:ama sizin için zaten doldurulmuş elisp ifadesi ile).
phils

7
Evet, gerçekten şok edici . Kabul cevap değil IMO, burada en iyi cevap (ancak OP görünüşte onun soruya en iyi karşılık hissediyor). Bana göre, bu cevap yazılı sorunun ne istediğine en yakın (son komutu tekrarla). Ve repeat.el(ki toplamlar C-x z z z...) tarafından sunulan olanaklar en yakın ikinci olasılıktır . İkinci soru sorulduğunda, en son hangi tuş vuruşlarının vurulduğu, en iyi cevap C-h l( view-lossage). describe-last-commandKomut için çok az kullanım var, IMHO .
Drew

Ayrıca C-x M-:kullanışlı olabilecek bir klavye makrosunun parçası olarak da kullanabilirsiniz . Varsayılan repeat-complex-commandciltlemeler, tekrar tekrar yazmak için fazla kullanışsızdır.
Aralık'ta

24

Ayrıca, M-x view-lossagegirdiğiniz son yüz (?) Tuş vuruşunu gösterir. Böylece, komutun nerede olduğunu görebilirsiniz. Şu anda M-x command-historykullanacağımı düşündüğüm kadar öğrenene kadar kullandım C-h w.


18

Gerçekten emin değilim, ama belki de bunu arıyorsun?

Command C-xz( repeat) yöntemi, bir Emacs komutunu birçok kez tekrarlamanın başka bir yolunu sağlar. Bu komut her ne olursa olsun önceki Emacs komutunu tekrarlar. Bir komutu tekrarlamak, daha önce kullanılan argümanları kullanır; her seferinde yeni argümanlar okumaz.

Emacs Manual, 8.11 Komutun Tekrarlanması


2
ve Johannes Schaub'un belirttiği gibi, daha sonra ztek başına basması tekrarlamaya devam edecektir.
phils

9

Bu da yardımcı olabilir ... emacs Yardım kelimesi kelimesine:

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

Şahsen Sebastian'ın fikrini yararlı buldum. İşte çalışan bir versiyon

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

2
Bu isearchve isearch-backwardönemli gezinme komutları olduğu ve ikincisinin varsayılan olarak <kbd> Cr </kbd> 'a bağlı olduğu göz önüne alındığında, yineleme komutu için muhtemelen daha iyi bir bağlama bulunabilir. Mac'te Command (super) -Y'yi öneririm, çünkü bazı uygulamalar zaten bunu 'geri al' öğesinin tersi olarak kullanma kuralına sahiptir.
Brighid McDonnell

0

Bu eskidir, ancak Emacs isteminde yazdığım son komutu almak istediğimde Google bunu ilk önce yayınlar. Bu cevapların hiçbiri benim için işe yaramadı, bu yüzden daha sonra yaptığım gibi bu sorunla karşılaşabilecekler için iki sentimi koymaya karar verdim. Ben Portacle kullanıyorum, ama ben de aradığımı buldum burada bu yüzden farklı ayarıyla işe 's jenerik yeterince umut ediyorum. Neyse, benim için çalıştı kullanıyor C-↑ve C-↓tarihin arasında gezinmek için. Kullanılması M-pve M-nsıra çalıştı, ama ben Bash biraz kullanmak beri okları kullanmayı tercih ediyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.