นั่นเป็นคุณสมบัติเฉพาะของ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"