บทความนี้บอกว่า "Emacs มีการทำซ้ำเพราะคุณสามารถย้อนกลับทิศทางได้ในขณะที่เลิกทำจึงเลิกทำการเลิกทำ"
สิ่งนี้หมายความว่า? ผู้ใช้จะ 'ทำซ้ำ' กับ Emac ได้อย่างไร
บทความนี้บอกว่า "Emacs มีการทำซ้ำเพราะคุณสามารถย้อนกลับทิศทางได้ในขณะที่เลิกทำจึงเลิกทำการเลิกทำ"
สิ่งนี้หมายความว่า? ผู้ใช้จะ 'ทำซ้ำ' กับ Emac ได้อย่างไร
คำตอบ:
เวอร์ชั่นสั้น: โดยการเลิกทำการเลิกทำ หากคุณเลิกทำแล้วทำคำสั่งที่ไม่แก้ไขเช่นC-fจากนั้นการเลิกทำครั้งต่อไปจะยกเลิกการเลิกทำส่งผลให้เกิดการทำซ้ำ
รุ่นที่ยาวกว่า:
คุณสามารถนึกถึงการเลิกทำการทำงานบนกองการปฏิบัติการ หากคุณดำเนินการคำสั่งบางอย่าง (แม้แต่คำสั่งการนำทางเช่นC-f) หลังจากลำดับของการดำเนินการเลิกทำ undos ทั้งหมดจะถูกผลักไปยังกองปฏิบัติการ ดังนั้นถัดไปยกเลิกการยกเลิกคำสั่งสุดท้าย สมมติว่าคุณมีลำดับการดำเนินการที่มีลักษณะดังนี้:
ตอนนี้คุณเลิกทำ มันเลิกทำการกระทำล่าสุดส่งผลให้รายการต่อไปนี้:
หากคุณทำสิ่งอื่นนอกเหนือจากเลิกทำ ณ จุดนี้ - พูด, C-fสแตกการดำเนินการจะเป็นดังนี้:
ตอนนี้เมื่อคุณเลิกทำสิ่งแรกที่เลิกทำคือเลิกทำ ส่งผลให้สแต็กดั้งเดิมของคุณ (และสถานะเอกสาร):
หากคุณใช้คำสั่งแก้ไขเพื่อแยกลำดับการเลิกทำคำสั่งนั้นจะถูกเพิ่มหลังจากเลิกทำและเป็นสิ่งแรกที่จะถูกยกเลิกในภายหลัง สมมติว่าคุณ backspaced มากกว่า "บาร์" C-fแทนการกดปุ่ม แล้วคุณจะมี
การเพิ่ม / การเพิ่มใหม่นี้จะเกิดขึ้นกับ infinitum ของโฆษณา ใช้เวลาเล็กน้อยในการทำความคุ้นเคย แต่มันทำให้ Emacs มีกลไกการเลิกทำ / ทำซ้ำที่ยืดหยุ่นและมีประสิทธิภาพสูง
วิธียกเลิก: C-_
หากต้องการทำซ้ำหลังจากเลิกทำ: C-g C-_
พิมพ์หลาย ๆ ครั้ง C-_ เพื่อทำซ้ำสิ่งที่เลิก C-_ ทำโดยการทำซ้ำคำสั่ง emacs หลายครั้งดำเนินการคำสั่งของคุณจากนั้นพิมพ์C-xzแล้วพิมพ์หลายครั้งที่zสำคัญเพื่อทำซ้ำคำสั่ง (น่าสนใจเมื่อคุณต้องการเรียกใช้แมโครหลายครั้ง)
C-u
เช่นC-u 8 *
(แทรกแปด * ที่เครื่องหมายรูปหมวก) ดังนั้นคุณสามารถใช้C-u x C-_
เพื่อเลิกทำxขั้นตอน
C-x e
) คุณสามารถกดได้e
บ่อยเท่าที่คุณต้องการเพื่อเรียกใช้งานอีกครั้ง
C-/
และเป็นทางเลือกที่เลิกผูกที่สำคัญเทียบเท่ากับC-x u
C-_
ฉันชอบC-/
เพราะมันตีง่ายกว่า
C-g C-_
จะ "ทำซ้ำหลังจากเลิกทำ" นั่นจะใช้เฉพาะในครั้งแรกที่คุณรวมกัน C-g
หลังจากนั้นทำซ้ำที่สำคัญของคุณโดยไม่ยกเลิก C-g C-_ C-_ C-_
ดังนั้นจะทำซ้ำสามครั้งหลังจากยกเลิกประเภท หากคุณพิมพ์C-g C-_ C-g C-_ C-g C-_
คุณจะไปเป็นวงกลมยกเลิกการทำซ้ำของคุณเลิก ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. โปรดทราบว่าC-g
จะไม่ทำซ้ำC-g
C-/
C-g
C-/
C-/
หากคุณกดปุ่มใด ๆ (ไม่ว่าจะเป็นการพิมพ์ตัวอักษรหรือเพียงแค่เลื่อนเคอร์เซอร์) ตั้งแต่คำสั่งเลิกทำล่าสุดของคุณไม่จำเป็นต้องพิมพ์C-g
ก่อนที่จะเลิกทำ / ทำซ้ำครั้งต่อไป C-g
เป็นเพียงรหัสปลอดภัยที่จะกดปุ่มซึ่งจะไม่ทำอะไรเลยด้วยตัวเอง แต่นับเป็นคีย์ที่ไม่เลิกทำเพื่อส่งสัญญาณการสิ้นสุดของลำดับการเลิกทำของคุณ กดคำสั่งอื่นเช่นC-f
จะทำงานเกินไป; เป็นเพียงว่ามันจะย้ายเคอร์เซอร์จากที่ที่คุณมีมัน
หากคุณกดปุ่มC-g
หรือคำสั่งอื่นเมื่อคุณไม่ได้ตั้งใจและตอนนี้คุณกำลังยกเลิกในทิศทางที่ไม่ถูกต้องเพียงกดC-g
เพื่อกลับทิศทางของคุณอีกครั้ง คุณจะต้องยกเลิกการทำซ้ำผ่านการทำซ้ำและการเลิกทำโดยไม่ตั้งใจก่อนที่คุณจะไปถึงการยกเลิกที่คุณต้องการ แต่ถ้าคุณกดปุ่มต่อC-/
ไปคุณจะต้องไปถึงสถานะที่คุณต้องการในที่สุด ในความเป็นจริงทุกสถานะที่เคยบัฟเฟอร์สามารถเข้าถึงได้ถ้าคุณกดC-g
หนึ่งครั้งแล้วกดC-/
ครั้งมากพอ
ทางลัดทางเลือกสำหรับundo
อื่น ๆ กว่าC-/
มีC-_
, และC-x u
M-x
undo
ดูเลิกทำในคู่มือการใช้งาน Emacs สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับระบบการเลิกทำการของ Emacs
สำหรับผู้ที่ต้องการให้มีการยกเลิกการทำงานร่วมกันมากขึ้น / undo-tree.el
ทำซ้ำบางคนได้เขียน มันให้รูปลักษณ์และความรู้สึกของการเลิกทำที่ไม่ใช่ Emacs แต่ให้การเข้าถึง 'ต้นไม้' ทั้งหมดของประวัติศาสตร์การเลิกทำ
ฉันชอบระบบเลิกทำของ Emacs แต่พบว่าแพ็คเกจนี้ใช้งานง่ายมาก
นี่คือความเห็นจากไฟล์เอง:
Emacs มีระบบเลิกทำการอันทรงพลัง ซึ่งแตกต่างจากระบบการยกเลิก / ทำซ้ำมาตรฐานซอฟต์แวร์ส่วนใหญ่จะช่วยให้คุณสามารถกู้คืนใด ๆของรัฐที่ผ่านมาของบัฟเฟอร์ (ในขณะที่ระบบการยกเลิก / ทำซ้ำมาตรฐานสามารถสูญเสียรัฐที่ผ่านมาโดยเร็วที่สุดเท่าที่จะทำซ้ำ) อย่างไรก็ตามพลังนี้มาในราคา: หลายคนพบว่าระบบเลิกทำของ Emacs เกิดความสับสนและใช้งานยากวางไข่จำนวนแพ็คเกจที่แทนที่ด้วยระบบยกเลิก / ทำซ้ำที่ใช้งานง่าย แต่มีประสิทธิภาพมากกว่า
ทั้งการสูญเสียข้อมูลที่มีมาตรฐานการเลิกทำ / ทำซ้ำและความสับสนของการเลิกทำของ Emacs เกิดจากการพยายามที่จะรักษาประวัติศาสตร์การเลิกทำตามลำดับการเปลี่ยนแปลงเชิงเส้น มันไม่ใช่. `เลิกทำต้นไม้โหมด 'จัดทำโดยแพคเกจนี้แทนที่ระบบเลิกทำของ Emacs ด้วยระบบที่ปฏิบัติต่อประวัติศาสตร์เลิกทำในสิ่งที่มันเป็น: ต้นไม้กิ่งก้านของการเปลี่ยนแปลง แนวคิดเรียบง่ายนี้ช่วยให้สามารถใช้งานพฤติกรรมที่เป็นธรรมชาติของระบบเลิกทำ / ทำซ้ำมาตรฐานได้มากขึ้นรวมกับพลังของการไม่เคยสูญเสียประวัติใด ๆ โบนัสด้านเพิ่มคือการยกเลิกการเก็บประวัติในบางกรณีสามารถเก็บไว้ได้อย่างมีประสิทธิภาพมากขึ้นทำให้สามารถสะสมการเปลี่ยนแปลงได้มากขึ้นก่อนที่ Emacs จะเริ่มทิ้งประวัติ
ระวังการเล่นโวหารต้นไม้สำหรับทำซ้ำ !
"ชุดเลขหมาย" ยอดนิยมจำนวนมาก (โหมโรง, เพอร์เซลล์, สเปซแม็ค) มาพร้อมกับการเลิกทำต้นไม้ ส่วนใหญ่ (ทั้งหมด?) แม้เปิดใช้งานโดยอัตโนมัติ ดังที่กล่าวไว้การเลิกทำต้นไม้เป็นวิธีที่สะดวกในการมองเห็นและสำรวจต้นไม้การเลิกทำ / ทำซ้ำ โหมโรงแม้จะให้มันคีย์คอร์ด ( uu
) C-x u
และยัง
ปัญหาคือ: ยกเลิกต้นไม้ดูเหมือนว่าจะทำลายเริ่มต้น Emacs' และเป็นที่รู้จักผูกพันสำหรับการทำซ้ำC-g C-/
:
คุณสามารถใช้ปุ่มสมมาตรเหล่านี้แทนการเลิกทำ / ทำซ้ำ :
C-/ undo
C-S-/ redo
สิ่งเหล่านี้มีประโยชน์เนื่องจากบางครั้งคุณต้องการทำซ้ำอย่างรวดเร็วโดยไม่ต้องเปิดโปรแกรมสร้างภาพ
ฉันพบว่าredo.el
มีประโยชน์มากสำหรับการทำ "ปกติ" เลิกทำ / ทำซ้ำและฉันมักจะผูกไว้กับ CSz และเลิกทำกับ Cz เช่นนี้
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
.emacs
เพียงดาวน์โหลดไฟล์ใส่ไว้ในกระเพื่อมเส้นทางของคุณและวางข้างต้นของคุณ
หากคุณต้องการที่จะทำซ้ำการดำเนินการล่าสุดทำต่อไปนี้
ESC
C + /
)ตามค่าเริ่มต้นการทำซ้ำใน Emacs ต้องกด Cg แล้วจึงเลิกทำ
อย่างไรก็ตามอาจเป็นไปได้ที่จะใช้ Emacs ในตัวเลิกทำเพื่อนำคำสั่งทำซ้ำไปใช้
แพ็กเกจการเลิกทำใช้ฟังก์ชันการเลิกทำของ Emac ในตัวเพื่อแสดงทั้งการเลิกทำและทำซ้ำ