การใช้บัฟเฟอร์ทางอ้อมมีประโยชน์อย่างไร? ภายใต้สถานการณ์ใดบ้างที่มีประโยชน์
การใช้บัฟเฟอร์ทางอ้อมมีประโยชน์อย่างไร? ภายใต้สถานการณ์ใดบ้างที่มีประโยชน์
คำตอบ:
หากต้องการดูและแก้ไขหลายตำแหน่งของบัฟเฟอร์เดียวกัน ดังนั้นคุณไม่จำเป็นต้องเลื่อนบัฟเฟอร์แบบยาว แต่เพียงสลับหน้าต่างไปยังพื้นที่ที่มองเห็นได้ แต่ละบัฟเฟอร์โคลนยังมีเครื่องหมายแหวนที่แตกต่างกันแคบและคุณสมบัติบัฟเฟอร์อื่น ๆ หากคุณไม่ได้ใช้บัฟเฟอร์ทางอ้อม แต่สร้างหน้าต่างอื่นของบัฟเฟอร์เดียวกันทุกอย่างจะถูกแชร์และคุณไม่สามารถดำเนินการคุณสมบัติขั้นสูงอื่น ๆ นอกเหนือจากการดูและแก้ไขสถานที่ต่าง ๆ ตัวอย่างเช่นด้วยบัฟเฟอร์ทางอ้อมคุณสามารถพับบล็อครหัสทั้งหมดสร้าง "แท็กทรี" ได้อย่างมีประสิทธิภาพโดยไม่กระทบกับบัฟเฟอร์ดั้งเดิม การใช้หน้าต่างบัฟเฟอร์ทั้งสองในหน้าต่างทั้งสองจะถูกพับเนื่องจากบัฟเฟอร์ทั้งสองเหมือนกัน
โดยสรุปบัฟเฟอร์ทางอ้อมเป็นบัฟเฟอร์ที่แตกต่างอย่างสิ้นเชิงที่เกิดขึ้นเพื่อแบ่งปันข้อความและไฟล์เดียวกันในบัฟเฟอร์เดิมของคุณดังนั้นเมื่อคุณบันทึกบัฟเฟอร์ที่โคลนแล้วมันจะบันทึกไฟล์ดั้งเดิมของคุณด้วย
กรณีการใช้งานหนึ่งกรณีใช้โหมดหลักที่แตกต่างกันในส่วนหนึ่งของไฟล์
เช่นฉันเคยทำงานกับเอกสาร xml พร้อมรหัสในองค์ประกอบบางอย่าง ฉันต้องการที่จะสามารถแก้ไขเอกสารทั้งหมดราวกับว่าเป็น xml แต่ยังคงมีคุณสมบัติโหมดหลักทั้งหมดสำหรับภาษาการเขียนโปรแกรมที่ฝังอยู่ในองค์ประกอบบางอย่างดังนั้นฉันจึง จำกัด ขอบเขตเนื้อหาขององค์ประกอบเหล่านั้นในบัฟเฟอร์ทางอ้อมที่ทำงานอยู่ โหมดหลักที่เหมาะสม
นี่คือฟังก์ชั่นจากการตั้งค่าของฉันที่ฉันใช้ในการทำสิ่งนี้:
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
หมายเหตุ: สิ่งนี้ไม่สมบูรณ์แบบสิ่งต่าง ๆ เช่นล็อคตัวอักษรต้องใช้งานเพิ่มเติมพิเศษเพื่อใช้ในสถานการณ์นี้
บัฟเฟอร์ทางอ้อมจะให้มุมมองหลาย ๆ ด้านของบัฟเฟอร์เดียวกันโดยเฉพาะอย่างยิ่งการตีบหลาย ๆ ครั้งซึ่งแต่ละการกระทำนั้นมีหลายประการเช่นบัฟเฟอร์แยกต่างหาก
ในฐานะที่เป็นความเห็นสำหรับห้องสมุดnarrow-indirect.el
พูดว่า:
คุณสามารถใช้บัฟเฟอร์ทางอ้อมมากกว่าที่คุณคิด คุณสามารถใช้โคลนที่นำมาจากส่วนของบัฟเฟอร์ Dired ตัวอย่างเช่นเพื่อให้มุมมองที่มีประโยชน์ (ใช้งาน) ในรายการไดเรกทอรี มีคีย์ / คำสั่งเพียงไม่กี่ตัวเท่านั้น (เช่น
g
เพื่ออัปเดตรายชื่อ) ที่ใช้งานไม่ได้เพราะขึ้นอยู่กับมุมมองของบัฟเฟอร์ Dired ทั้งหมด การทดสอบและคุณจะไม่ต้องสงสัยเลยว่าการใช้งานใหม่ที่น่าสนใจสำหรับบัฟเฟอร์ทางอ้อม