มี (ซ้ำคำสั่งสุดท้าย) ใน Emacs หรือไม่


143

บ่อยครั้งที่ฉันขุด apropos และ docs กำลังมองหาสิ่งต่อไปนี้เท่านั้นที่จะยอมแพ้เพื่อกลับไปที่งานที่ทำอยู่:

(ซ้ำสุดท้ายคำสั่ง)

ทำคำสั่ง C- หรือ M- สุดท้ายที่ฉันเพิ่งดำเนินการ (เพื่อให้รีบาวด์ไปยังคีย์ fn)

หรือบางครั้งเกี่ยวข้อง:

(อธิบายสุดท้ายฟังก์ชั่น)

การกดแป้นพิมพ์ที่ฉันเพิ่งทำผิดพลาดซึ่งผลที่ฉันต้องการเพิ่มในถุงของฉัน คำอธิบายคีย์ใกล้ แต่ต้องรู้ว่าฉันพิมพ์อะไร

ฉันแค่ขอจากเพื่อนสนิทที่เชื่อถือได้ของฉันมากเกินไปหรือไม่


1
Cx Z (repeat)และ Cx (repeat-complex-command)Mz (repeat-matching-complex-command)ดูเพิ่มเติม
Hatshepsut

คำตอบ:


62

ในส่วนที่เกี่ยวกับ ' อธิบาย - หน้าที่สุดท้าย ':

มีตัวแปรlast-commandที่ตั้งเป็นตัวแทนสัญลักษณ์ของสิ่งสุดท้ายที่คุณทำ ดังนั้นเกร็ดเล็กเกร็ดน้อย elispet - (describe-function last-command)- ควรนำเอกสารสำหรับสิ่งที่เกิดขึ้นทันที

ดังนั้นคุณสามารถทำงานได้เล็กน้อยdescribe-last-functionเช่นนี้

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

ใส่ Elisp ว่าใน.emacsหรือเทียบเท่าและคุณจะมีMx อธิบายสุดท้ายฟังก์ชั่น

หากคุณกระแทกปุ่มบางปุ่มหรือทำสิ่งที่แก้ไขคำสั่งสุดท้ายตั้งแต่สิ่งที่คุณสนใจcommand-historyฟังก์ชันอาจเป็นที่สนใจ คุณสามารถรับได้โดยMx คำสั่งประวัติ


168

ฟังก์ชั่นการทำซ้ำจัดทำโดยrepeat.elแพ็คเกจ Emacs Lisp ซึ่งมาพร้อมกับการแจกแจงมาตรฐานของ Emacs จากrepeat.elเอกสารของ:

แพ็กเกจนี้กำหนดคำสั่งที่ทำซ้ำคำสั่งก่อนหน้าสิ่งที่รวมถึงอาร์กิวเมนต์ของมันไม่ว่าจะเป็นอะไรก็ตาม คำสั่งนี้เชื่อมต่อกับคีย์ Cx z หากต้องการทำซ้ำคำสั่งก่อนหน้านี้หนึ่งครั้งให้พิมพ์ Cx z หากต้องการทำซ้ำเป็นครั้งที่สองทันทีหลังจากพิมพ์เพียง z ด้วยการพิมพ์ z ซ้ำแล้วซ้ำอีกคุณสามารถทำซ้ำคำสั่งซ้ำแล้วซ้ำอีก

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง repeat ให้พิมพ์C-h F repeat RETจากภายใน Emacs


160

ทำซ้ำคำสั่งสุดท้าย

C-xz

เมื่อคุณกดเพียงแค่กด z หลังจากนั้นและมันจะทำซ้ำ (โดยไม่ต้องกดC-xอีกครั้ง)


สิ่งที่ฉันคาดหวังให้ทำ
Vasantha Ganesh K

81

ใช่มีคำสั่งทำซ้ำ มันถูกเรียกว่าrepeat:

  • คุณสามารถทำซ้ำคำสั่งด้วยC-x zและกดzเพื่อทำซ้ำ

บิตตกตะลึงไม่มีใครกล่าวถึงได้จากกุญแจสำคัญที่มีผลผูกพันrepeat-complex-commandC-x ESC ESC


2
คล้ายกับ Mx Mp ยกเว้นการทำซ้ำคำสั่งที่ซับซ้อนจะทำซ้ำอาร์กิวเมนต์ก่อนหน้า
Yoo

5
นอกจากนี้ในC-x M-:(ตัวช่วยจำ: ชอบM-:แต่มีนิพจน์ elisp กรอกไว้แล้วสำหรับคุณ)
phils

7
ใช่ตกตะลึงแน่นอน คำตอบที่ยอมรับไม่ใช่คำตอบที่ดีที่สุดที่นี่ IMO (แต่ OP เห็นได้ชัดว่ามันตรงกับคำถามของเธอที่สุด) สำหรับฉันคำตอบนี้ใกล้เคียงกับคำถามที่เขียนไว้ (คำสั่งสุดท้ายซ้ำ) และความเป็นไปได้ที่เสนอโดยrepeat.el(ที่ subsumes C-x z z z...) เป็นครั้งที่สองที่ใกล้เคียงที่สุด Wrt คำถามที่สองถามเกี่ยวกับการกดแป้นที่ถูกตีครั้งสุดท้ายคำตอบที่ดีที่สุดคือC-h l( view-lossage) มีประโยชน์เล็กน้อยสำหรับdescribe-last-commandคำสั่ง
ดึง

นอกจากนี้คุณยังสามารถใช้C-x M-:เป็นส่วนหนึ่งของแมโครแป้นพิมพ์ซึ่งมีประโยชน์ การrepeat-complex-commandผูกค่าเริ่มต้นนั้นค่อนข้างยุ่งยากเกินกว่าที่จะพิมพ์ซ้ำไปซ้ำมา
remि

24

นอกจากนี้ยังM-x view-lossageแสดงการกดแป้นร้อยครั้งล่าสุด (?) ที่คุณป้อน ดังนั้นคุณจะสามารถดูว่าคำสั่งนั้นอยู่ที่ไหน มันเป็นสิ่งที่ฉันใช้จนกระทั่งฉันเพิ่งพบตอนนี้เกี่ยวกับM-x command-historyสิ่งที่ฉันคิดว่าฉันจะใช้กับC-h wตอนนี้


18

ฉันไม่แน่ใจจริงๆ แต่บางทีคุณกำลังค้นหาสิ่งนี้อยู่ใช่ไหม

คำสั่งC-xz( repeat) ให้วิธีอื่นในการทำซ้ำคำสั่ง Emacs หลายครั้ง คำสั่งนี้ทำซ้ำคำสั่ง Emacs ก่อนหน้านี้ไม่ว่าจะเป็นอะไรก็ตาม การทำซ้ำคำสั่งใช้อาร์กิวเมนต์เดียวกันกับที่เคยใช้มาก่อน มันไม่ได้อ่านอาร์กิวเมนต์ใหม่ทุกครั้ง

คู่มือการใช้งาน Emacs, 8.11 การทำซ้ำคำสั่ง


2
และดังที่โยฮันเนสชอบกดตามมาzด้วยตัวของมันเองจะเป็นการกล่าวย้ำต่อไป
phils

9

อาจเป็นเช่นนี้จะช่วยด้วย ... จาก emacs ช่วยเหลือทุกคำต่อคำ:

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

โดยส่วนตัวฉันพบว่าแนวคิดของเซบาสเตียนมีประโยชน์ นี่คือรุ่นที่ใช้งานได้

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

2
เมื่อพิจารณาแล้วisearchและisearch-backwardเป็นคำสั่งการนำทางที่สำคัญและที่หลังถูกผูกไว้กับ <kbd> Cr </kbd> โดยค่าเริ่มต้นเราอาจพบว่ามีผลผูกพันที่ดีกว่าสำหรับคำสั่งซ้ำ สำหรับ Mac ฉันขอแนะนำ Command (super) -Y เนื่องจากบางแอพมีรูปแบบการใช้ที่ตรงกันข้ามกับ 'undo'
Brighid McDonnell

0

นี่เป็นรุ่นเก่า แต่ Google จะปรากฏขึ้นก่อนเมื่อฉันต้องการเรียกคำสั่งสุดท้ายที่ฉันพิมพ์ที่พรอมต์ Emacs ไม่มีคำตอบใดที่เหมาะกับฉันดังนั้นฉันจึงตัดสินใจใส่สองเซ็นต์ลงไปสำหรับคนที่อาจสะดุดเมื่อฉันทำเช่นนี้ ฉันใช้ Portacle แต่ฉันพบสิ่งที่ฉันกำลังมองหาที่นี่ดังนั้นฉันจึงหวังว่ามันจะเป็นแบบทั่วไปพอที่จะทำงานกับการตั้งค่าที่แตกต่างกัน อย่างไรก็ตามสิ่งที่ใช้ได้ผลสำหรับฉันคือการใช้C-↑และC-↓หมุนเวียนไปตามประวัติศาสตร์ ใช้M-pและM-nทำงานได้ดี แต่ฉันชอบที่จะใช้ลูกศรตั้งแต่ฉันใช้ Bash สักหน่อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.