เหตุใดจึงต้องใช้บัฟเฟอร์ทางอ้อม


คำตอบ:


16

หากต้องการดูและแก้ไขหลายตำแหน่งของบัฟเฟอร์เดียวกัน ดังนั้นคุณไม่จำเป็นต้องเลื่อนบัฟเฟอร์แบบยาว แต่เพียงสลับหน้าต่างไปยังพื้นที่ที่มองเห็นได้ แต่ละบัฟเฟอร์โคลนยังมีเครื่องหมายแหวนที่แตกต่างกันแคบและคุณสมบัติบัฟเฟอร์อื่น ๆ หากคุณไม่ได้ใช้บัฟเฟอร์ทางอ้อม แต่สร้างหน้าต่างอื่นของบัฟเฟอร์เดียวกันทุกอย่างจะถูกแชร์และคุณไม่สามารถดำเนินการคุณสมบัติขั้นสูงอื่น ๆ นอกเหนือจากการดูและแก้ไขสถานที่ต่าง ๆ ตัวอย่างเช่นด้วยบัฟเฟอร์ทางอ้อมคุณสามารถพับบล็อครหัสทั้งหมดสร้าง "แท็กทรี" ได้อย่างมีประสิทธิภาพโดยไม่กระทบกับบัฟเฟอร์ดั้งเดิม การใช้หน้าต่างบัฟเฟอร์ทั้งสองในหน้าต่างทั้งสองจะถูกพับเนื่องจากบัฟเฟอร์ทั้งสองเหมือนกัน

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


3
ฉันยอมรับว่าบัฟเฟอร์ทางอ้อมมีประโยชน์ แต่ประเด็นแรกของคุณไม่ต้องการให้บัฟเฟอร์เป็นทางอ้อม คุณสามารถดูและแก้ไขหลาย ๆ ตำแหน่งของบัฟเฟอร์เดียวกันแม้ว่าจะเปิดบัฟเฟอร์เดียวกันในสองหน้าต่าง แต่ใช่การ จำกัด อิสระการพับ ฯลฯ เป็นคุณสมบัติที่แข็งแกร่งของบัฟเฟอร์ทางอ้อมในความคิดของฉัน
Kaushal Modi

5
แก้ไขบัฟเฟอร์เดียวกันด้วยโหมดต่างๆ (รวมบัฟเฟอร์ทางอ้อมเข้ากับการ จำกัด ) คุณสามารถแก้ไขบางส่วนของบัฟเฟอร์ด้วยโหมด markdown, ส่วนอื่นด้วยโหมด python, ส่วนอื่นที่มีโหมด json
freakhill

คุณสามารถดูสถานที่หลายแห่งโดยใช้หลายหน้าต่างเพียงอย่างเดียว แต่เนื่องจากมีเพียงจุดเดียวในสถานการณ์นี้การสลับบัฟเฟอร์จะไม่รักษาตำแหน่งในทั้งสองหน้าต่าง แต่จะมีเพียงจุดเดียว
politza

9

กรณีการใช้งานหนึ่งกรณีใช้โหมดหลักที่แตกต่างกันในส่วนหนึ่งของไฟล์

เช่นฉันเคยทำงานกับเอกสาร 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)))

หมายเหตุ: สิ่งนี้ไม่สมบูรณ์แบบสิ่งต่าง ๆ เช่นล็อคตัวอักษรต้องใช้งานเพิ่มเติมพิเศษเพื่อใช้ในสถานการณ์นี้


3

บัฟเฟอร์ทางอ้อมจะให้มุมมองหลาย ๆ ด้านของบัฟเฟอร์เดียวกันโดยเฉพาะอย่างยิ่งการตีบหลาย ๆ ครั้งซึ่งแต่ละการกระทำนั้นมีหลายประการเช่นบัฟเฟอร์แยกต่างหาก

ในฐานะที่เป็นความเห็นสำหรับห้องสมุดnarrow-indirect.elพูดว่า:

คุณสามารถใช้บัฟเฟอร์ทางอ้อมมากกว่าที่คุณคิด คุณสามารถใช้โคลนที่นำมาจากส่วนของบัฟเฟอร์ Dired ตัวอย่างเช่นเพื่อให้มุมมองที่มีประโยชน์ (ใช้งาน) ในรายการไดเรกทอรี มีคีย์ / คำสั่งเพียงไม่กี่ตัวเท่านั้น (เช่นgเพื่ออัปเดตรายชื่อ) ที่ใช้งานไม่ได้เพราะขึ้นอยู่กับมุมมองของบัฟเฟอร์ Dired ทั้งหมด การทดสอบและคุณจะไม่ต้องสงสัยเลยว่าการใช้งานใหม่ที่น่าสนใจสำหรับบัฟเฟอร์ทางอ้อม

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