ฉันจะทำให้คำสั่งปรากฏเป็นตัวหนาใน zsh ได้อย่างไร


18

ฉันได้ตั้งค่า bash shell ของฉันเพื่อให้คำสั่งใด ๆ ที่ฉันพิมพ์ปรากฏเป็นตัวหนาและผลลัพธ์ของคำสั่งจะแสดงในน้ำหนักปกติ:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันทำสิ่งนี้โดยการเพิ่ม\e[01mที่ส่วนท้ายของPS1ตัวแปรของฉันเพื่อเปิดตัวหนาและใช้trap DEBUGเพื่อปิด:

trap 'printf "\e[0m" "$_"' DEBUG

ด้วยวิธี\e[0mนี้พิมพ์ก่อนที่จะดำเนินการแต่ละคำสั่งและฉันได้รับน้ำหนักตัวอักษรปกติในการส่งออก

ฉันจะไปเกี่ยวกับการรับผลเหมือนกันได้zshอย่างไร

คำตอบ:


13

วิธีที่ล้าสมัยคือการใช้ POSTEDIT

 POSTEDIT=$'\e[0m'

(และโดยวิธีการนี้ไม่ได้ทุบตีไม่ได้ใช้กับดัก DEBUG เพื่อจำลองpreexec: zsh เป็นที่ที่มันมาจาก ) แต่เนื่องจาก zsh 4.3.11 คุณสามารถใช้บรรทัดคำสั่งอำนวยความสะดวกเน้นไวยากรณ์ ให้พรอมต์ของคุณใส่ใจเฉพาะเรื่องพรอมต์และชุดของคุณ

zle_highlight=(default:bold)

7

สิ่งที่คุณต้องการคือฟังก์ชั่นเบ็ด preexec :

preexec() { printf "\e[0m"; }

จากนั้นก่อนที่คำสั่งแต่ละคำสั่งpreexecจะถูกเรียกใช้เพื่อรีเซ็ตแบบอักษรของคุณเป็นปกติ

ดังนั้นในการรับพรอมต์เดียวกับที่คุณแสดงในคำถามของคุณให้เพิ่มบรรทัดเหล่านี้ใน~/.zshrc:

autoload -U colors && colors
PS1="%{$fg_bold[yellow]%}%n@%m %{$fg[blue]%}%~ \$ %{$reset_color%}%{$fg_bold[white]%}"
preexec() { printf "\e[0m"; }

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