แก้ไขหนึ่งไฟล์ในบัฟเฟอร์สองแบบที่แตกต่างกันใน emacs


28

ฉันต้องการเปิดไฟล์foo.barสองครั้ง (หรือมากกว่า) ใน emacs ดังนั้นฉันสามารถแก้ไขสองส่วนที่แตกต่างกันของมันพร้อมกัน มันเป็นไปได้? อาจเป็นคำถามที่ดีกว่าคือทำอย่างไร มีวิธีการเปิดแต่ละอินสแตนซ์ในบัฟเฟอร์ / เฟรมของตนเองหรือไม่?


คุณสามารถแสดงบัฟเฟอร์เดียวกันในหน้าต่างต่างๆ นี่ไม่ใช่วิธีแก้ปัญหาสำหรับปัญหานี้หรือ
Tom

คำตอบ:


35

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

คุณสามารถสร้างบัฟเฟอร์ทางอ้อมซึ่งมีจุดทำเครื่องหมายโหมดและอื่น ๆ แต่เนื้อหาเดียวกันกับบัฟเฟอร์เดิม (และบันทึกบัฟเฟอร์ใดเขียนไปยังไฟล์เดียวกัน) M-x clone-indirect-buffer RETเพื่อสร้างบัฟเฟอร์ที่สองที่เป็นโคลนของบัฟเฟอร์ปัจจุบันเรียก C-x 4 cที่จะเปิดที่บัฟเฟอร์ที่สองในหน้าต่างที่แตกต่างกันคุณสามารถพิมพ์


3
เพื่อชี้แจง: C-x 4 cวิ่งclone-indirect-buffer-other-windowดังนั้นสิ่งนี้จะถูกนำมาใช้แทนclone-indirect-bufferไม่ปฏิบัติตามคำสั่งที่ อย่างไรก็ตามในระบบของฉันคำสั่งทั้งสองนี้ดูเหมือนจะทำสิ่งเดียวกัน
SabreWolfy

ฉันหวังว่าฉันจะสามารถจำวิธีการนี้ได้: - /
pedz

@pedz C-x 4เป็นคำนำหน้าสำหรับหน้าต่างcสำหรับการโคลน คุณสามารถกำหนดการผูกอื่น ๆ ได้ถ้าต้องการ C-x cไม่ได้ใช้ในการกำหนดค่าเริ่มต้นคุณสามารถใช้สิ่งนั้นได้หากคุณไม่กลัวการกดปุ่มC-x C-cแทนโดยไม่ตั้งใจ ฉันกำหนดC-x 5 cให้โคลนในเฟรมใหม่ในไฟล์ init ของฉัน
Gilles 'หยุดชั่วร้าย'

8

แยกโหมดหน้าจอ: โดยที่ctrl+ xหมายถึงกดปุ่ม ctrl ค้างไว้แล้วพิมพ์ x จากนั้นพิมพ์หมายเลขต่อไปนี้

ctrl+ x2 (แยกตามแนวนอน)

หรือ

ctrl+ x3 (แยกตามแนวตั้ง)

จากนั้นคุณสามารถเลื่อนดูได้อย่างอิสระในไฟล์เดียวกันหรือเปิดบัฟเฟอร์อื่นหากคุณต้องการหนึ่งในนั้น

หากต้องการกลับไปเป็นประเภทมุมมองเดียว

ctrl+ x1

หากคุณต้องการคุณสามารถแยกแต่ละหน้าจอ (ส่วน) หลาย ๆ ครั้งตามที่ต้องการ เลือกหน้าจอที่คุณต้องการแยกก่อนจากนั้นทำการแยกแนวนอนหรือแนวตั้ง


อ๊ะ! คุณไม่ควรรวมการนำทางด้วยคีย์บอร์ดระหว่างเฟรม? C-x oวิ่งother-windowและวนผ่าน "windows" ที่มองเห็นได้ในแต่ละ "frame" (การใช้การกำหนดค่า emacs ที่หน้าต่างตัวจัดการหน้าต่างเรียกว่าเฟรมและพาเนลแยกต่างหากภายในนั้นเรียกว่า windows (ฉันรู้ฉันรู้ แต่ฉันไม่รับผิดชอบ))
dmckee

ฉันมักจะใช้เม้าส์
Matt H

1

Emacs นั้นเอนเอียงไปที่บานหน้าต่าง (windows) ไม่ใช่เฟรม มักจะต้องการเปิดบัฟเฟอร์เดียวกันในเฟรมอื่นไม่ใช่เฉพาะหน้าต่างอื่นในเฟรมเดียวกัน แต่C-x 5 cไม่ได้ผูกไว้ตามค่าเริ่มต้น รหัสนี้กำหนดclone-indirect-buffer-other-frameฟังก์ชั่นที่ขาดหายไป:

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.