คุณจะสร้าง RPROMPT ใน zsh ได้อย่างไรเมื่ออัพเดททุกครั้ง


11

ฉันRPROMPTถูกตั้งค่าให้แสดงข้อมูล SVN vcs_infoใช้ RPROMPT=${vcs_info_msg_0_}มันอ่าน เรียกว่าใช้vcs_info precmd()อย่างไรก็ตาม RPROMPT จะไม่อัปเดตเมื่อฉันเปลี่ยนไดเรกทอรี มันทำงานได้ก็ต่อเมื่อฉันเรียกใช้พรอมต์อีกครั้ง (โดยแหล่งที่มา ~ / .zshrc หรือพรอมต์) และจะไม่เปลี่ยนแปลงตาม chdir เว้นแต่ว่าฉันจะเรียกใช้พรอมต์อีกครั้ง มีวิธีใดบ้างที่จะเปลี่ยนพฤติกรรมนี้

คำตอบ:


20

ลองใส่เครื่องหมายคำพูดเดี่ยวรอบ ๆ ค่าตัวแปรที่กำหนดเพื่อชะลอการประเมิน:

RPROMPT='${vcs_info_msg_0_}'

ทำไมเครื่องหมายถูกหายไปเมื่อมีการย้ายข้อมูล

@ user5383: คุณควรถามใน meta.unix.stackexchange.com หรือ meta.stackoverflow.com ฉันไม่รู้คำตอบ (หรือรู้เพียงราง)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

3
สิ่งนี้ต้องการที่setopt PROMPT_SUBSTเกิดขึ้นก่อนหน้านี้ในไฟล์ มิเช่นนั้นมันก็จะสะท้อนออกมาพร้อมท์อย่างแท้จริง
Nick Meharry

1

การใช้เครื่องหมายคำพูดเดี่ยวเพื่อชะลอการประเมินผลทำงานเพื่อกำหนดนามแฝงไดนามิกเช่นกัน นี่คือนามแฝงที่tใช้ในการแนบเชลล์ใหม่กับกระบวนการเอเจนต์ ssh ที่มีอยู่ซึ่งเริ่มต้นด้วยนามแฝงที่เรียกssh-startว่าเขียนโค้ดเชลล์ลงในไฟล์ใน homedir:

mymistress:~> which ssh-start
ssh-start: aliased to eval `ssh-agent | tee ~/.ssh/ssh-agent.out` ; ssh-add ~/.ssh/id_rsa
mymistress:~> grep "alias t" .zshrc    
alias t="eval `cat ~/.ssh/ssh-agent.out`"
mymistress:~> which t
t: aliased to eval SSH_AUTH_SOCK=/tmp/ssh-nZBZp29804/agent.29804; export SSH_AUTH_SOCK;\nSSH_AGENT_PID=29805; export SSH_AGENT_PID;\necho Agent pid 29805;`

คำจำกัดความของข้อมูลtนั้นไม่ดีเนื่องจากทำให้ข้อมูลใหม่จากการเรียกใช้ใหม่ssh-startถูกละเว้น การเปลี่ยนคำจำกัดความของนามแฝงของtที่จะอ้างถึงโดยลำพังใน. zshrc ของฉันให้พฤติกรรมที่ดีขึ้นมาก:

mymistress:~> grep "alias t" .zshrc
alias t='eval `cat ~/.ssh/ssh-agent.out`'
mymistress:~> source ~/.zshrc
mymistress:~> which t
t: aliased to eval `cat ~/.ssh/ssh-agent.out`

สังเกตการขยายคำจำกัดความtตามที่ระบุโดยการwhich tแสดงผลของอัญประกาศคู่ (การขยายคำสั่งหรือตัวแปรสภาพแวดล้อมแบบทันทีทันใด) เทียบกับเครื่องหมายคำพูดเดี่ยว (การประเมินคำสั่งและตัวแปรล่าช้า)

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