การตัดบรรทัดน้อยลงเช่น fmt ทำได้หรือไม่


4

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

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

คำตอบ:


1

เลขที่ หากต้องการตรวจสอบดาวน์โหลด ล่าสุด less แหล่ง และทบทวน input.c รอบเส้น 178:

177             /*
178              * The char won't fit in the line; the line
179              * is too long to print in the screen width.
180              * End the line here.
181              */
182             if (chopline || hshift > 0)
183             {
184                 do
185                 {
186                     if (ABORT_SIGS())
187                     {
188                         null_line();
189                         return (NULL_POSITION);
190                     }
191                     c = ch_forw_get();
192                 } while (c != '\n' && c != EOI);
193                 new_pos = ch_tell();
194                 endline = TRUE;
195                 quit_if_one_screen = FALSE;
196             } else

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

man การใช้งาน less -is โดยค่าเริ่มต้นซึ่ง IMO ค่อนข้างดี แต่ไม่ใช่สิ่งที่คุณต้องการ

ดังนั้น ... ฉันคิดว่าวิธีเดียวที่เป็นที่ยอมรับแม้ว่าจะไม่ได้ปรับขนาดเทอร์มินัลก็ตาม:

fmt -w $(tput cols) | less

-1

ตัดตอนมาจาก หน้าคนน้อย :

-S or --chop-long-lines
    Causes lines longer than the screen width to be chopped rather than folded.
    That is, the portion of a long line that does not fit in the screen width
    is not shown. The default is to fold long lines; that is, display the
    remainder on the next line.

ฉันกลัวว่านี่จะไม่ตอบคำถามของฉัน ฉันต้องการให้เส้นถูกพันที่ขอบเขตของคำ ไม่ สับหรือพับ
Psychonaut

-1

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

  • fmt ชื่อไฟล์ | น้อยกว่า

ที่จะบรรลุสิ่งที่คุณกำลังมองหา


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