Linux: พร้อมต์การทุบตีการระบายสีจะทำให้แคร่คืนสินค้า


24

เมื่อฉันลอง colorize bashprompt เช่นนี้:

export PS1="\e[0;31m[\u@\h \W]\$ \e[m "

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

ถ้าฉันลบลำดับสีมันใช้งานได้ดี
ฉันใช้ Ubuntu 11.10 และเทอร์มินัล (guake มีจุดบกพร่องเดียวกันด้วย)


แปลก. มันทำงานได้โดยไม่มีปัญหาใด ๆ ใน RedHat 5 และ Mac OS X
Matteo

สำเนาที่เป็นไปได้ของปัญหา PS1, cmd กำลังวนซ้ำ
grawity

คำตอบ:


43

คุณต้องล้อมลำดับ escape ทั้งหมดระหว่าง\[และ\]เพื่อให้ 'readline' เพื่อคำนวณความยาวที่มองเห็นได้อย่างรวดเร็วของพรอมต์ หากไม่มีพวกเขา 'readline' จะคิดว่าพรอมต์นั้นยาวเกินกว่าจะเป็นและไม่ทราบว่าเมื่อใดที่ข้อความถึงระยะขอบ

PS1 = " \ [ \ e [; 31m \] [\ u @ \ h \ W] \ $ \ [ \ e [m \] "

4
ขอบคุณตัน !! ฉันพยายามค้นหาเอกสารบางอย่างเกี่ยวกับมันในเอกสารอย่างเป็นทางการ แต่ไม่สามารถทำได้ - พรอมต์สี 'หุ้น' จะใช้ 'เคล็ดลับ' นี้และฉันมีช่วงเวลาที่ยากลำบากในการหาสิ่งที่มันเป็นดังนั้นขอขอบคุณสำหรับการล้างที่ --- btw ฉันหาแหล่งข้อมูลเอกสารใน 'man readline 3' รอบ ๆ บรรทัดที่ 684 และมันบอกว่านี่เรียกว่า 'skip-csi-sequence' สำหรับผู้ที่ต้องการทราบว่าเอกสารเกี่ยวกับเรื่องนี้อยู่ที่ใด ฉันไม่คิดว่าฉันจะพบมันหากคุณไม่ชี้ให้ฉันไปที่ readline (3) แม้ว่าฉันจะรู้เรื่องนี้มาก่อน - ไม่สามารถทำการเชื่อมต่อได้
osirisgothra

"wrap" หมายถึงอะไร? คุณหมายถึงห่อสิ่งที่ทั้งใน\[ , \]? ฉันเดาอย่างนั้น แต่มันดูเหมือนจะไม่ได้ผลสำหรับฉัน
Max Howell

2
@osirisgothra: เอกสารกำลังพูดถึงสิ่งที่แตกต่าง - skip-csi-sequenceหมายถึงการระงับลำดับการป้อนข้อมูลที่สร้างขึ้นโดยคีย์พิเศษ
grawity

1
@ MaxHowell คุณต้องตัดแต่ละ\e[xxmลำดับไม่ใช่สตริงทั้งหมด
Enrico

ขอบคุณ ในกรณีของฉันฉันเพิ่งถูกแทนที่\e[39mด้วย\[\e[;39m\]และใช้งานได้ดี
Herrgott

1

ทิป [และ] ทำงานกับการทุบตีใน OS X 10.8.2 เช่นกัน

ฉันใช้:

PS1 = "[\ e [0; 37m \ W \ $ (git branch 2> / dev / null | grep -e '*' | sed 's / ^ .. (. *) / {\ 1} /') \ $ \ e [m] "

ซึ่งแสดงให้ฉันเห็นสาขาใช้งานปัจจุบันของฉัน


คุณรู้เกี่ยวกับ "__git_ps1" หรือไม่
rafak

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