ฉันต้องการเปิดไฟล์foo.bar
สองครั้ง (หรือมากกว่า) ใน emacs ดังนั้นฉันสามารถแก้ไขสองส่วนที่แตกต่างกันของมันพร้อมกัน มันเป็นไปได้? อาจเป็นคำถามที่ดีกว่าคือทำอย่างไร มีวิธีการเปิดแต่ละอินสแตนซ์ในบัฟเฟอร์ / เฟรมของตนเองหรือไม่?
ฉันต้องการเปิดไฟล์foo.bar
สองครั้ง (หรือมากกว่า) ใน emacs ดังนั้นฉันสามารถแก้ไขสองส่วนที่แตกต่างกันของมันพร้อมกัน มันเป็นไปได้? อาจเป็นคำถามที่ดีกว่าคือทำอย่างไร มีวิธีการเปิดแต่ละอินสแตนซ์ในบัฟเฟอร์ / เฟรมของตนเองหรือไม่?
คำตอบ:
คุณสามารถเปิดบัฟเฟอร์เดียวกันในมากกว่าหนึ่งหน้าต่าง (ซึ่งสามารถแพร่กระจายในเฟรมต่าง ๆ ) แต่มันไม่สะดวก แต่ละหน้าต่างมีจุดของตัวเอง แต่พวกเขาทั้งหมดใช้ร่วมกันเครื่องหมายโหมดไฟล์แคบและลักษณะอื่น ๆ เนื่องจากนอกเหนือจากจุดสวยมากลักษณะทั้งหมดจะผูกกับบัฟเฟอร์ นอกจากนี้หากคุณบังเอิญไปที่บัฟเฟอร์อีกอันในหน้าต่างเดียวคุณจะเสียตำแหน่งในไฟล์
คุณสามารถสร้างบัฟเฟอร์ทางอ้อมซึ่งมีจุดทำเครื่องหมายโหมดและอื่น ๆ แต่เนื้อหาเดียวกันกับบัฟเฟอร์เดิม (และบันทึกบัฟเฟอร์ใดเขียนไปยังไฟล์เดียวกัน) M-x clone-indirect-buffer RET
เพื่อสร้างบัฟเฟอร์ที่สองที่เป็นโคลนของบัฟเฟอร์ปัจจุบันเรียก C-x 4 c
ที่จะเปิดที่บัฟเฟอร์ที่สองในหน้าต่างที่แตกต่างกันคุณสามารถพิมพ์
C-x 4 c
วิ่งclone-indirect-buffer-other-window
ดังนั้นสิ่งนี้จะถูกนำมาใช้แทนclone-indirect-buffer
ไม่ปฏิบัติตามคำสั่งที่ อย่างไรก็ตามในระบบของฉันคำสั่งทั้งสองนี้ดูเหมือนจะทำสิ่งเดียวกัน
C-x 4
เป็นคำนำหน้าสำหรับหน้าต่างc
สำหรับการโคลน คุณสามารถกำหนดการผูกอื่น ๆ ได้ถ้าต้องการ C-x c
ไม่ได้ใช้ในการกำหนดค่าเริ่มต้นคุณสามารถใช้สิ่งนั้นได้หากคุณไม่กลัวการกดปุ่มC-x C-c
แทนโดยไม่ตั้งใจ ฉันกำหนดC-x 5 c
ให้โคลนในเฟรมใหม่ในไฟล์ init ของฉัน
แยกโหมดหน้าจอ: โดยที่ctrl+ xหมายถึงกดปุ่ม ctrl ค้างไว้แล้วพิมพ์ x จากนั้นพิมพ์หมายเลขต่อไปนี้
ctrl+ x2 (แยกตามแนวนอน)
หรือ
ctrl+ x3 (แยกตามแนวตั้ง)
จากนั้นคุณสามารถเลื่อนดูได้อย่างอิสระในไฟล์เดียวกันหรือเปิดบัฟเฟอร์อื่นหากคุณต้องการหนึ่งในนั้น
หากต้องการกลับไปเป็นประเภทมุมมองเดียว
ctrl+ x1
หากคุณต้องการคุณสามารถแยกแต่ละหน้าจอ (ส่วน) หลาย ๆ ครั้งตามที่ต้องการ เลือกหน้าจอที่คุณต้องการแยกก่อนจากนั้นทำการแยกแนวนอนหรือแนวตั้ง
C-x o
วิ่งother-window
และวนผ่าน "windows" ที่มองเห็นได้ในแต่ละ "frame" (การใช้การกำหนดค่า emacs ที่หน้าต่างตัวจัดการหน้าต่างเรียกว่าเฟรมและพาเนลแยกต่างหากภายในนั้นเรียกว่า windows (ฉันรู้ฉันรู้ แต่ฉันไม่รับผิดชอบ))
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)
)
)
)
)