รับฟังก์ชั่น Into PS1 (Zsh)?


15

ใช้งานได้ในbash( parse_git_branchเป็นฟังก์ชันที่กำหนดไว้)

export PS1="\$(parse_git_branch)"

แต่ฉันไม่สามารถเข้าใจสิ่งที่เทียบเท่าzshได้

หมายเหตุ:ถ้าฉันทำ

PROMPT="$(parse_git_branch)"

ดูเหมือนว่าจะใช้งานได้ แต่ในความเป็นจริงมันกำลังรันคำสั่งเมื่อฉันตั้งค่าพรอมต์ซึ่งไม่ใช่ประเด็น

คำตอบ:


26

คุณต้องรวม

setopt PROMPT_SUBST

ในของคุณ.zshrc, man zshallอธิบายไว้ในการขยายตัว PROMPTส่วน:

หากตั้งค่าตัวเลือก PROMPT_SUBST สตริงพรอมต์จะอยู่ภายใต้การขยายพารามิเตอร์การทดแทนคำสั่งและการขยายเลขคณิตเป็นครั้งแรก


14

ที่จริงปัญหาของคุณไม่ได้เป็นเพียงการตั้งค่าPROMPT_SUBST: คุณใช้เครื่องหมายคำพูดคู่ในสคริปต์ของคุณบังคับให้ประเมินฟังก์ชั่นเมื่อคุณตั้งค่าPROMPTตัวแปร คุณต้องการการประเมินผลเมื่อมีการคำนวณพรอมต์นั่นคือคุณต้องใช้เครื่องหมายคำพูดเดี่ยว


5

อย่างที่อากิระบอกว่าคุณต้องใช้พรอมต์ย่อย นี่คือรหัสเริ่มต้นของฉัน (ยังคงทำงานอยู่):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

หรือดีกว่า

setopt PROMPT_SUBST
PROMPT='[$PR_MAGENTA%n$PR_NO_COLOR@$PR_GREEN%U%m%u$PR_NO_COLOR:$PR_RED%2c$PR_NO_COLOR]$(parse_git_branch) %(!.#.$)'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.