เหตุใดเครื่องหมายเปอร์เซ็นต์จึงปรากฏขึ้นก่อนที่แต่ละพรอมต์บน zsh ใน Windows


13

ฉันได้รับการตั้งค่า zsh ใน Windows และฉันได้รับสัญลักษณ์ย้อนกลับ (สีดำบนพื้นขาว (พื้นหลังเทอร์มินัลสีดำ)) ในตำแหน่งอักขระตัวแรกในบรรทัดเหนือทุกคำเตือน

โดยทั่วไปนั่นหมายความว่าไม่มีการขึ้นบรรทัดใหม่ในตอนท้ายของไฟล์เช่นเมื่อทำการcatเปิดไฟล์

มันไม่ได้เกิดขึ้นบน Mac ของฉันหรือแม้กระทั่งใน Mintty บน Windows แต่มันเกิดขึ้นใน ConEmu และแอปเทอร์มินัลมาตรฐานที่ CMD.EXE มักใช้งาน

ฉันได้รับunsetสตริงพรอมต์ทั้งหมดของฉันแล้วprecmd()ซึ่งโดยปกติฉันจะใช้เพื่อเพิ่มบรรทัดว่างด้านบนของพรอมต์

เบาะแสอะไรที่มันอาจจะเป็น?

คำตอบ:


33

ตัวเลือกที่เกี่ยวข้องอาจเป็นคำPROMPT_SPอธิบายจากคู่มือ

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

เมื่อบรรทัดบางส่วนถูกสงวนไว้โดยค่าเริ่มต้นคุณจะเห็นอักขระผกผัน + ตัวหนาที่ส่วนท้ายของบรรทัดบางส่วน: %สำหรับผู้ใช้ปกติหรือ#สำหรับรูท หากตั้งค่าพารามิเตอร์เชลล์PROMPT_EOL_MARK สามารถใช้เพื่อกำหนดวิธีแสดงจุดสิ้นสุดของบางส่วนของบรรทัด

ดังนั้นไม่ว่าคุณจะทำ

unsetopt PROMPT_SP

หากคุณไม่สนใจเกี่ยวกับสายที่ครอบคลุม (แต่ในกรณีของคุณดูเหมือนว่าจะเป็นบรรทัดว่างเปล่าเมื่อคุณได้รับ%สัญญาณในตอนเริ่มต้น)

หรือใช้

setopt PROMPT_CR
setopt PROMPT_SP
export PROMPT_EOL_MARK=""

ซึ่งเก็บรักษาบางส่วนของบรรทัด แต่จะลบ%- ที่ค่าใช้จ่ายของบางบรรทัดที่ว่างเปล่าบนพรอมต์

~/.zshrcนี้เพื่อให้ถาวรปรับปรุงของคุณ

นี่เป็นช็อตตาบอดเนื่องจากฉันไม่สามารถทำซ้ำพฤติกรรมนี้cmd.exeได้


1
ขอบคุณ @mpy สิ่งนี้ทำให้ฉันเข้าสู่จุดที่ถูกต้องเพื่อเรียนรู้เพิ่มเติม นี่คือสิ่งที่ฉันคิดขึ้นมา: 1) สามสิ่งทำงานได้มากขึ้นถ้าคุณรวมตัวเลือก: unsetopt PROMPT_CR; unsetopt PROMPT_SP; และ PROMPT_EOL_MARK = "" 2) การตั้งค่า PROMPT_EOL_MARK = "" กำจัดอักขระผกผัน + ตัวหนา "%" ที่น่ารำคาญ แต่ก็ยังเพิ่มฟีดบรรทัดเพิ่มเติมดังนั้นการแจ้งเตือนจะดูแตกต่างจาก mintty หรือ Mac 3) ฉันลงเอยด้วยการไม่ได้ตั้งค่า PROMPT_SP ซึ่งเป็นการประนีประนอมที่ดีที่สุด 4) การใช้ set และ unset ไม่ทำงานยกเว้นว่าคุณใช้ออปชั่น -o setopt และ unsetopt ทำงาน หากคุณจะแก้ไขผมจะยอมรับคำตอบของคุณ :)
scanny

@scanny: setฉันต้องขอโทษสำหรับ แน่นอนมันควรจะเป็นsetopt- เห็นได้ชัดว่าฉันเขียนคำตอบของฉันเร็วเกินไป ฉันอัปเดตคำตอบของฉันและพยายามรวมประเด็นเกี่ยวกับบรรทัดว่างไว้ด้วย
mpy

2

ดังนั้นฉันจึงมีปัญหาเดียวกันกับ zsh + oh-my-zsh ของฉัน

ฉันได้แก้ไขด้วยความช่วยเหลือจาก mpy และบรรทัดเหล่านั้น:

setopt PROMPT_CR

setopt PROMPT_SP

ส่งออก PROMPT_EOL_MARK = ""

คุณต้องไปที่ -> ~ / .oh-my-zsh / themes / XXXXXX คุณต้องเปิดชุดรูปแบบที่คุณใช้ใน oh-my-zsh ดังนั้นสำหรับฉันเพื่อเป็นตัวอย่างของ agnoster

เพียงแค่เปิดไฟล์นี้และคัดลอก / วาง 3 บรรทัดที่ท้ายไฟล์

และมันคงที่ !!

หวังว่าคุณจะมีวันที่ดีและสิ่งนี้จะช่วยให้บางคนออกไป

สันติภาพ


โปรดอย่าเพิ่ม "ขอบคุณ" เป็นคำตอบ ลงทุนเวลาในไซต์และคุณจะได้รับสิทธิ์ที่เพียงพอในการถอนคำตอบที่คุณชอบซึ่งเป็นวิธีที่ผู้ใช้ระดับสูงในการพูดขอบคุณ
DavidPostill

0

คุณสามารถเรียกใช้เงินภายในของ ConEmu นั่นกำจัดเปอร์เซ็นต์สำหรับฉัน

นี่คือสิ่งที่ฉันมีสำหรับพารามิเตอร์งาน:

/icon "%ConEmuDrive%\msys64\msys2.ico"

และคำสั่ง:

set CHERE_INVOKING=1 & %ConEmuDrive%\\msys64\usr\bin\mintty.exe -i "%ConEmuDrive%\msys64\msys2.ico" -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.