นั่นเป็นคุณสมบัติเฉพาะของzsh
(และตอนนี้fish
เช่นกัน) เพื่อให้คุณเห็นบรรทัดที่ไม่ถูกทำลายในเอาต์พุตของคำสั่งอย่างชัดเจน
ในเชลล์แบบดั้งเดิมหากคำสั่งแสดงผลข้อมูลบางส่วนหลังจากอักขระขึ้นบรรทัดใหม่ล่าสุดหรือกล่าวอีกนัยหนึ่งถ้ามันปล่อยเคอร์เซอร์เทอร์มินัลไม่อยู่ที่จุดเริ่มต้นของบรรทัดพรอมต์ถัดไปโดยเชลล์จะต่อท้ายกับบรรทัดที่ไม่สิ้นสุด ในขณะที่:
bash-4.4$ printf XXX
XXXbash-4.4$
mangles นั้นเป็นพรอมต์และมันง่ายที่จะพลาดที่XXX
นั่นโดยเฉพาะถ้าคุณได้รับพรอมต์ที่ดีกว่าแบบนั้น นอกจากนี้ยังมีผลต่อการวางตำแหน่งเคอร์เซอร์ซึ่งทำให้เกิดความบกพร่องในการแสดงผลเมื่อคุณเลื่อนเคอร์เซอร์ไปมา
zsh
หลีกเลี่ยงปัญหาดังกล่าวด้วยการแสดงว่าเอาต์พุตมีบรรทัดที่ไม่ได้ระบุด้วย%
อักขระในวิดีโอตัวหนาและย้อนกลับและออกพรอมต์ถัดไปที่จุดเริ่มต้นของบรรทัดถัดไป:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
มันทำเช่นนั้นโดยการแสดงผลวิดีโอย้อนกลับ%
ที่ส่วนท้ายของทุกคำสั่ง (ก่อนแต่ละพรอมต์) แต่ตามด้วยช่องว่าง 79 ช่อง (สมมติว่าเทอร์มินัลกว้าง 80 อักขระ), ตัวอักษร CR (ตัวที่ทำให้เคอร์เซอร์ย้อนกลับไปที่ คอลัมน์) และลำดับที่จะลบไปยังจุดสิ้นสุดของบรรทัด (แล้วพรอมต์)
ด้วยวิธีนี้หากมีเส้นที่ไม่ถูกทำลายเนื่องจากเคอร์เซอร์ไม่อยู่ในตำแหน่งแรกอักขระ 80 ตัวเหล่านั้นจะทำให้เคอร์เซอร์เลื่อนไปที่บรรทัดถัดไป (และ%
จะอยู่) ถ้าไม่เช่นนั้น%
จะมีช่องว่าง 79 ช่องในหนึ่งบรรทัดซึ่งจะถูกลบหลังจากนั้น
ทีนี้ใช้งานได้ก็ต่อเมื่อเทอร์มินัลทำการตัดบรรทัด (ตัวอย่างเช่นซึ่งจะไม่ทำงานอย่างถูกต้องหลังจากนั้นtput rmam
) หากคุณมีเทอร์มินัลช้า (เช่น 9600 baud serial line) คุณอาจเห็นว่า%
มีการแสดงผลและถูกลบออกหลังจากแต่ละคำสั่งดังนั้นzsh
ให้คุณปิดการใช้งานคุณสมบัติดังกล่าว:
unsetopt prompt_cr prompt_sp
ด้วยวิธีนี้zsh
จะทำตัวเหมือนเปลือกหอยแบบดั้งเดิมมากขึ้น
คุณยังสามารถเปลี่ยนเครื่องหมายนั้นด้วย$PROMPT_EOL_MARK
ตัวแปรได้
print -n "this is a test"
จากนั้นprint "this is a test"