ทำไม Vim ตั้งความกว้างของข้อความสูงสุดเป็น 79 แทนที่จะเป็น 80


13

ฉันสับสนเล็กน้อยเกี่ยวกับค่าเริ่มต้นใน Vim โดยเฉพาะอย่างยิ่งสำหรับgq{motion}มีการกล่าวกันว่า

[...]
If the 'textwidth' option is 0, the formatted line
length is the screen width (with a maximum width of
79).

ฉันคิดว่ามันควรมีเหตุผลมากกว่านี้หากตั้งค่าความกว้างสูงสุดไว้ที่80แทน

ใครบางคนสามารถสอนฉันเกี่ยวกับเรื่องนี้? ฉันคิดว่าฉันขาดอะไรไป


1
ดี80เป็นพลสวย "มาตรฐาน" จะเริ่มต้นด้วยดังนั้น ... ทำไมไม่79? ตอนนี้สายการตัดที่79ใน80ขั้วคอลัมน์กว้างเพื่อให้มีพื้นที่มากขึ้นอีกนิดไปทางขวาและอาจปรับปรุงความชัดเจน github.com/vim/vim/blob/…
romainl

2
บางทีใน80เทอร์มินัลทั้งคอลัมน์คอลัมน์สุดท้ายถูกสงวนไว้สำหรับสัญลักษณ์การตัดหรือไม่ ยังถ้าคุณมีหมายเลขบรรทัดในนั้นพวกเขาจะใช้เวลามากกว่าหนึ่งคอลัมน์แน่นอน ดังนั้นฉันยังคงงงงวย ยิ่งไปกว่านั้นจากรหัสที่คุณเชื่อมโยง79จะสามารถใช้ค่าสูงสุดได้หรือไม่ บางทีฉันอาจไม่เข้าใจสิ่งที่ฉันอ่าน
Atcold

3
... หรือคุณสามารถตั้งค่าtextwidthและทำได้ด้วย
VanLaser

13
80 คือจำนวนคอลัมน์ของเทอร์มินัลฮาร์ดแวร์เก่าและหน้าจอ MS DOS (โหมดข้อความ) tw=79แทนที่จะเป็นtw=80เพราะการแสดงความยาวบรรทัด 80 อักขระบนเทอร์มินัล 80 คอลัมน์จะพิมพ์บรรทัดใหม่พิเศษ
Sato Katsura

7
ขึ้นบรรทัดใหม่จะถูกเพิ่มเสมอ หากมันเป็นตัวอักษร 81 ในเทอร์มินัลกว้าง 80 ตัวอักษรคุณจะได้รับบรรทัดเต็มตามด้วยว่างเปล่า
Sato Katsura

คำตอบ:


7

ฉันไม่มีหลักฐานว่านี่คือเหตุผลว่าทำไม 79 ถูกเลือก แต่เหตุผลที่ดีอย่างหนึ่งที่จะทิ้งมันไว้ที่ค่านั้นก็เพราะถ้าคุณใช้'list'กับค่าที่รวมไว้eolใน'listchars'การแสดงรายการของ listchar จะทำให้ 80 ตัวอักษร - บรรทัดความยาวเพื่อตัดบรรทัดถัดไปในเทอร์มินัลกว้าง 80 อักขระ

ถ้าบรรทัดเป็นเพียง 79 ตัวอักษรแล้วคอลัมน์ 80 เป็นบริการฟรีสำหรับปลายของเส้นlistcharจะนั่งอยู่ใน


ฉันไม่เข้าใจ ฉันควรใช้'list'ที่ไหน มันควรจะทำอะไร?
Atcold

@Atcold เป็นตัวเลือกที่ทำให้ตัวละครที่มักจะมองไม่เห็น (เช่นจุดสิ้นสุดของบรรทัด) ที่จะแสดงบนหน้าจอ ดู:help 'list'หรือลองเรียกใช้:set listเพื่อดูการทำงาน
รวย

:set listไม่ได้ทำอะไรมาก ฉันเดิมพันที่ฉันไม่ได้มีในeol listcharsฉันไม่แน่ใจว่านี่คือเหตุผลที่อยู่เบื้องหลัง79ตัวละคร ฉันเชื่อว่า @ sato-katsura มีคำตอบที่ดีที่สุดในความคิดเห็น
Atcold

eolอยู่ใน'listchars'ค่าเริ่มต้น แต่แน่นอนเป็นไปได้ว่ามีบางสิ่งในการกำหนดค่าของคุณที่ได้ลบ ฉันระบุโดยเฉพาะในคำตอบของฉันว่าฉันไม่มีเหตุผลที่จะเชื่อว่านี่เป็นเหตุผลทางประวัติศาสตร์ที่ 79 ได้รับเลือก ฉันแค่ให้เหตุผลอื่นว่าทำไมมันถึงยังคงเป็นค่าที่ดีที่จะใช้ตอนนี้
รวย

@Atcold บรรทัดใหม่จะไม่แสดงตามค่าเริ่มต้นมันไม่สมเหตุสมผลที่จะจองอักขระพิเศษสำหรับสิ่งนั้น
Christian Brabandt

6

มันเป็นสิ่งสำคัญที่จะตระหนักว่านี้ "เริ่มต้น" เพียงนำไปใช้gqและgwคำสั่งและจัดรูปแบบอัตโนมัติตามที่อธิบายไว้ในส่วนนั้น ค่าเริ่มต้นtextwidthคือ 0 นอกจากนี้:rightและ:centerค่าเริ่มต้นที่ 80 ไม่ใช่ 79

สำหรับเหตุผลที่ 79 ได้รับเลือกก็ไม่สามารถถือมากกว่าตรงจาก vi ตั้งแต่gq, gwและจัดรูปแบบอัตโนมัติไม่อยู่ใน vi นี่คือการเก็งกำไรส่วนใหญ่ แต่ฉันเชื่อว่า 79 ค่าเริ่มต้นสำหรับรูปแบบอัตโนมัติถูกเลือกเพื่อความสอดคล้องกับการตัดคำอัตโนมัติที่มีอยู่ของ vi สิ่งนี้ใช้ได้กับgqและgwเป็นผลข้างเคียง หนึ่งอาจคาดว่า 80 จะได้รับการคัดเลือกเป็นอย่างอื่น

ใน vi (และในความเป็นกลุ่มถ้าtextwidth=0) wrapmarginข้อความที่เริ่มอัตโนมัติห่อที่กว้างของหน้าต่างลบ อย่างไรก็ตามหากwrapmargin=0ไม่มีการตัดคำอัตโนมัติเกิดขึ้น ซึ่งหมายความว่าหากคุณใช้ ADM-3A ที่มีความยาวไม่เกิน 80 ตัวอักษรโดยwrapmargin=1ความกว้างสูงสุดที่มีการห่ออัตโนมัติคือ 79 ข้อดีของพฤติกรรมนี้คือมีเคอร์เซอร์อยู่ขณะรอดูว่ามีอะไรอยู่ ตัวละครต่อไปจะเป็นก่อนที่จะตัดสินใจเลือกที่จะพัน แน่นอนว่า vi และ vim สามารถวางเคอร์เซอร์ไว้ที่บรรทัดถัดไป (ดังที่สังเกตเมื่อพิมพ์คำที่ยาวมาก) แต่การทิ้งคอลัมน์พิเศษไว้จะค่อนข้างดีกว่า

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