Emacs - หลายคอลัมน์หนึ่งบัฟเฟอร์


165

ฉันกำลังพยายามแก้ไขรหัสการประกอบบางอย่างซึ่งมีแนวโน้มที่จะจัดรูปแบบในรายการที่ยาว แต่บาง ฉันต้องการใช้พื้นที่แนวนอนบางเอเคอร์ที่ฉันมีและดูรหัสเพิ่มเติมบนหน้าจอในครั้งเดียว มีวิธีการรับ Emacs (หรือตัวแก้ไขอื่น ๆ ) เพื่อแสดงให้ฉันเห็นคอลัมน์หลายคอลัมน์ทั้งหมดชี้ไปที่บัฟเฟอร์เดียวกันหรือไม่?

Cx 3 (emacs) และ: vsplit (vim) นั้นยอดเยี่ยมสำหรับการดูหลาย ๆ ครั้งในโค้ด แต่ฉันต้องการให้มันไหลจากคอลัมน์หนึ่งไปยังอีกคอลัมน์หนึ่ง (เช่นข้อความในหนังสือพิมพ์)


1
Cx 3: vsplit ที่ดีสำหรับมุมมองที่แยกจากกันหลายเป็นรหัส แต่ฉันต้องการที่จะไหลจากที่หนึ่งไปยังคอลัมน์อื่น ๆ (เช่นข้อความในหนังสือพิมพ์)
user119857

1
ขอบคุณ! ฉันตกหลุมรักกับการดูรหัส 4-6 คอลัมน์ที่ฉันพยายามจัดรูปแบบรหัสทั้งหมดของฉันเป็น 30-40 ตัวอักษรและฉันรักผลลัพธ์มาก - ด้วยการทำให้ทุกบรรทัดสั้นไม่ใช่แค่เส้นสั้นตามธรรมชาติพื้นที่น้อยกว่ามาก สูญเปล่าและพื้นที่หน้าจอทั้งหมดของฉันถูกใช้เพื่อแสดงข้อความ ยิ่งไปกว่านั้นบล็อคโค้ดมีมากขึ้นแบบ 2 มิติทำให้เข้าใจภาพและควบคุมโครงสร้างได้ง่ายขึ้น
Erik Kaplun

คำตอบ:


248

ดูติดตามโหมด ข้อความที่ตัดตอนมา:

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

3
ฉันสามารถใช้สิ่งนี้กับหน้าต่างมากกว่าสองบานได้หรือไม่ ฉันขอใช้สี่หน้าต่างนี้ได้ไหม
Yktula

ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะแก้ไขสองคอลัมน์ในแหล่งข้อมูลเดียวกันในแบบแยกกันไม่แยกในสองหน้าต่าง นี่ไม่ใช่ตัวอย่างที่ดีที่สุด แต่ลองจินตนาการว่าฉันมีหนึ่งคอลัมน์สำหรับโค้ดสคริปต์และอีกอันสำหรับความคิดเห็นถ้าฉันอยู่ในคอลัมน์ที่สองฉันต้องการกด "enter" และดำเนินการต่อในบรรทัดถัดไป แต่ในคอลัมน์ที่สอง เป็นไปได้กับ Emacs หรือโปรแกรมแก้ไขข้อความอื่น ๆ ?
sw

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

17

ฉันใช้ฟังก์ชั่นนี้เพื่อเรียกใช้follow-modeแม้ว่ามันจะต้องปรับแต่งสำหรับขนาดหน้าจอที่แตกต่างกัน:

;;; I want a key to open the current buffer all over the screen.
(defun all-over-the-screen ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (follow-mode t))

บวก 1 สำหรับการชี้ (หน้าต่างสมดุล) เพียงอย่างเดียว! ฉันเดาว่าคุณสามารถแยกมันเป็นพารามิเตอร์หลาย ๆ ครั้งและทำให้ฟังก์ชั่นโต้ตอบได้ นอกจากนี้การตั้งค่าscroll-marginเพื่อจะทำให้ความรู้สึกในการ0 follow-mode
Erik Kaplun

15

ปลั๊กอิน "Multipager" สำหรับ Vim สามารถทำได้ด้วยการแบ่ง VIM สำหรับผู้ที่ต้องการรับพฤติกรรมนี้ใน Vim

รับได้จากหน้าของดร. ชิป: http://mysite.verizon.net/astronaut/vim/index.html#MPAGE

เอกสาร: http://mysite.verizon.net/astronaut/vim/doc/mpage.txt.html


1
แต่คำถามเกี่ยวกับ Emacs ไม่ใช่เสียงเรียกเข้า
Alexander I.Grafov

2

กลุ่มสามารถทำได้โดยใช้:vsplit- และคุณสามารถเปิดบัฟเฟอร์เดียวกันใน "windows" หลาย ๆ อัน (ซึ่งจริง ๆ แล้วเป็นส่วนภายใน "หน้าต่าง" เดียว)

เอกสารที่นี่


3
emacs สามารถทำเช่นนั้นได้ตามที่กล่าวไว้ในคำถาม แต่นั่นไม่ใช่สิ่งที่ถูกถาม
justinhj

1
รวมกับ:scrollbindและคุณอยู่ที่นั่น
bastibe

@Kragen - วิธีการทำเช่นนี้คือ: 1. แยกหน้าต่างในแนวตั้งเพื่อให้มองเห็นบัฟเฟอร์เดียวในสองหน้าต่าง 2. เลื่อนในหน้าต่างที่สองเพื่อให้บรรทัดแรกในหน้าต่างที่สองมาหลังจากบรรทัดสุดท้ายในหน้าต่างแรก 3 ออกคำสั่ง:set scrollbindในแต่ละหน้าต่าง ตอนนี้หน้าต่างจะเลื่อนเข้าหากันตามต้องการ (หมายเหตุ: scrollopt ต้องมีตัวเลือก 'ver')
Herbert Sitz

อืมนั่นมันทำงานได้ดี เย็น! ขอบคุณ! ใครบางคนควรเขียนสคริปต์เป็นกลุ่มเพื่อทำสิ่งนี้โดยอัตโนมัติ
Kragen Javier Sitaker

-1

ดูอย่างรวดเร็วที่ emacs wiki ไม่แสดงโหมดเหมือนที่คุณอธิบาย อย่างไรก็ตามมันไม่ควรเขียนยากเกินไป ... คุณแค่ต้องแบ่งหน้าต่างด้วย Cx 3 และย้ายข้อความในหน้าต่างอื่นลงและเมื่อใดก็ตามที่คุณย้ายข้อความให้ทำแบบเดียวกันกับหน้าต่างอื่น ..

ปัญหาอาจเกิดขึ้นเมื่อคุณไปถึงด้านล่างของบัฟเฟอร์คุณต้องการให้เคอร์เซอร์ไปที่หน้าต่างอื่นที่ด้านบนทันทีหรือไม่?

อืมอาจจะไม่ใช่เรื่องง่าย แต่มันควรจะเป็นไปได้ ...


1
... และ Elisp ถูกเพิ่มเข้าไปในรายการสิ่งที่ฉันต้องการเพื่อเรียนรู้ :) ขอบคุณมาก Brian;)
119857

เห็นได้ชัดว่ามีคนทำแล้ว แต่ใช่ elisp เป็นเครื่องมือที่น่าทึ่ง!
Brian Postow

-5

นี่เป็นพฤติกรรมเริ่มต้นของ emacs เมื่อทำการแยกหน้าต่าง (Cx 3 สำหรับการแบ่งตามแนวตั้ง) คุณจะได้รับสองคอลัมน์ซึ่งทั้งสองมีบัฟเฟอร์เปิดอยู่


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

-7

ใช้การแบ่งแนวตั้งด้วย Cx 3 ซึ่งจะแบ่งบัฟเฟอร์ปัจจุบันเป็นสองคอลัมน์ที่คุณสามารถสลับระหว่างกับ Cx o


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