ฉันจะแบ่งย่อหน้าออกเป็นหนึ่งบรรทัดต่อประโยค แต่ยังคงซ่อนอยู่ได้อย่างไร?


14

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

ฉันอยากมีโหมดย่อยที่เมื่อใช้งานจะเข้าร่วมสายตาบรรทัดจากวรรคเดียวกัน (ไม่แยกจากกันโดย\n\nหรือparagraph-separateหรือ ... ) และพฤติกรรมการเปิดใช้งานแล้ว (อาจจะมาจากvisual-line-mode) \nที่จะตัดสายโดยไม่ต้องใส่

มีโหมดดังกล่าวหรือไม่? ถ้าไม่ฉันจะไปเกี่ยวกับกระบวนการแก้ไขคุณสมบัติการแสดงผลของย่อหน้าเพื่อให้ได้ผลลัพธ์อย่างไร (หลังจากทั้งหมดนี่คือ crux ของโหมดดังกล่าวและสามารถพัฒนาได้จากข้อมูลโค้ด)


[... ] จะเข้าร่วมด้วยสายตา [... ] คุณหมายถึงการรักษาพื้นฐาน\n(ถ้ามี) หรือคุณต้องการให้ลบบรรทัดใหม่เพื่อให้ 1 วรรคต่อบรรทัดหรือไม่
Jonathan Leech-Pepin

1
บางทีคุณสามารถใช้buffer-display-tableเพื่อทำให้บรรทัดใหม่\nดูเหมือนจะเป็นอย่างอื่นเช่นช่องว่างหรือบางสิ่งบางอย่าง - ดูตัวอย่างต่อไปนี้ในลิงค์: stackoverflow.com/a/24842771/2112489 ข้อดีของสิ่งนี้คือข้อความใน เอกสารไม่ได้ถูกแก้ไข บรรทัดใหม่อาจเป็นอะไรก็ได้เช่นหน้ายิ้มช่องว่างสัญลักษณ์ pilcrow ฯลฯ เอฟเฟ็กต์ภาพคือการห่อ
ฏหมาย

@ JonathanLeech-Pepin ฉันต้องการเก็บบรรทัดใหม่ที่มีอยู่ ในความเป็นจริงฉันต้องการบังคับให้ขึ้นบรรทัดใหม่ด้วยการวางประโยค แต่สิ่งนี้สามารถทำได้โดยใช้ตะขอแยก
ฌอน Allred

1
@ ลอว์ลิสต์เอฟเฟ็กต์ภาพคือบรรทัดใหม่จะหายไปทุกหนทุกแห่งใช่มั้ย ย่อหน้าทั้งหมดจะไม่ยุบลงในหนึ่งหรือไม่
Malabarba

1
ฉันเห็นด้วยกับคำขอนี้ แต่คิดว่าโหมดรองที่อธิบายโดย OP ไม่ใช่วิธีแก้ไขที่ถูกต้อง ปัญหาพื้นฐานคือความแตกต่างนั้นใช้งานไม่ได้กับข้อความเนื่องจากออกแบบมาสำหรับรหัส การแก้ไขปัญหาใน Emacs เป็นไปได้ แต่ไม่ใช่วิธีการที่สะอาดด้วยเหตุผลหลายประการ มันจะดีกว่ามากในการปรับปรุงความแตกต่างในการทำงานกับข้อความได้ดี
tmalsburg

คำตอบ:


3

อย่างที่ทอมพูดการวางจอแสดงผลในบรรทัดใหม่จะเป็นงาน

ปัญหาคือการคิดออกว่าจะตัดสายไหน

นี่คือตัวอย่างเพื่อให้คุณเริ่มต้น:

(let ((eol-regexp "[[:graph:]] ?\\(\n\\)[^\t\n ]"))
  (font-lock-add-keywords nil
   `((,eol-regexp 1 '(face default display " ")))))

(visual-line-mode 1)

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

คำอธิบายเพิ่มเติมบางส่วน:

  1. font-lock-add-keywordsเพิ่มรายการกฎในการล็อคแบบอักษร (ดังนั้นจึงต้องเปิดใช้งานการล็อคแบบอักษรอาร์กิวเมนต์แรกอาจเป็นโหมด (เช่นtext-mode) ในกรณีของเรามันเป็นศูนย์ซึ่งหมายถึงการเพิ่มกฎสำหรับบัฟเฟอร์ปัจจุบันเท่านั้น
  2. "กฎ" (,eol-regexp 1 '(face default display " "))ของเราคือ องค์ประกอบแรกคือการแสดงออกปกติที่เราสร้างไว้ก่อนหน้านี้ ที่สองคือ subexpression เราสนใจ; ที่สามคือ "ใบหน้า" ที่เราต้องการใช้
  3. ในขณะที่ใช้ใบหน้าสำหรับบรรทัดใหม่นั้นไม่มีประโยชน์สำหรับเราเรายังสามารถเพิ่มคุณสมบัติข้อความได้ ดังนั้นเราจึงใช้ใบหน้าที่เป็นค่าเริ่มต้นและเพิ่มแม่มดแสดงคุณสมบัติแทนสตริงย่อย 1 (เช่นขึ้นบรรทัดใหม่) ด้วยช่องว่าง
  4. font-lock-remove-keywordsถ้าคุณยิงตัวเองในการเดินเท้าลบบัฟเฟอร์หรือลบคำหลักที่มี
  5. นอกจากนี้คุณยังอาจต้องการเพิ่มdisplayไปfont-lock-extra-managed-props(ฉันไม่ได้พยายามนี้)
  6. ส่วนที่ยุ่งยากคือการได้รับ regexp ที่ถูกต้อง "\ (\ n \) [^ \ n]" จะตรงกับบรรทัดใหม่ใด ๆ ที่ไม่ได้ตามมาทันทีด้วยอีกอันหนึ่ง ". \ {30, \} \ (\ n \)" จะตรงกับบรรทัดใหม่ที่นำหน้าด้วยอักขระอย่างน้อย 30 ตัว

คุณสามารถค้นหาการนำไปใช้ข้างต้นเป็นแพ็คเกจได้ที่github.com/andersjohansson/tex-fold-linebreaks
zakkak

0

หากฉันเข้าใจปัญหาอย่างถูกต้องคุณต้องการเก็บบรรทัดใหม่ทั้งหมดในบัฟเฟอร์ตามที่เป็นอยู่ แต่คุณต้องการแสดงบางส่วนเป็นช่องว่าง จากนั้นคุณต้องการตัดคำ

สำหรับการตัดคำฉันคิดว่าคุณสามารถvisual-line-modeใช้ได้

สำหรับการจัดการกับการขึ้นบรรทัดใหม่ฉันคิดว่าคุณอาจใส่displayคุณสมบัติด้วย" "(สตริงที่มีช่องว่างเดียว) เป็นค่าในการขึ้นบรรทัดใหม่ที่คุณต้องการแสดงแตกต่างกัน

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