Bagaimana Anda membuat RPROMPT dalam pembaruan zsh sendiri di setiap entri?

11

My RPROMPTdiatur untuk menampilkan info svn menggunakan vcs_info. Bunyinya RPROMPT=${vcs_info_msg_0_}. vcs_infodisebut menggunakan precmd(). Namun, RPROMPT tidak memperbarui ketika saya mengubah direktori. Ini hanya berfungsi jika saya memanggil prompt lagi (baik dengan sumber ~ / .zshrc atau prompt) dan tidak berubah pada chdir, kecuali saya memanggil prompt lagi. Apakah ada cara untuk mengubah perilaku ini?


sumber

Jawaban:

20

Coba letakkan tanda kutip tunggal di sekitar nilai variabel saat penugasan untuk menunda evaluasi:

RPROMPT='${vcs_info_msg_0_}'
Dijeda sampai pemberitahuan lebih lanjut.
sumber
mengapa tanda centang hilang saat dimigrasikan?
@ user5383: Anda harus menanyakan itu di meta.unix.stackexchange.com atau meta.stackoverflow.com. Saya tidak tahu (atau hanya samar-samar tahu) jawabannya.
Dijeda sampai pemberitahuan lebih lanjut.
3
Ini mensyaratkan bahwa setopt PROMPT_SUBSTtelah terjadi sebelumnya dalam file. Kalau tidak, itu hanya akan menggemakan prompt secara harfiah.
Nick Meharry
1

Menggunakan kutipan tunggal untuk menunda evaluasi berfungsi untuk mendefinisikan alias dinamis juga. Berikut ini alias,, tdigunakan untuk melampirkan shell baru ke proses ssh agent yang ada, yang dimulai dengan alias ssh-startyang menulis kode shell ke file di 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;`

Definisi titu buruk karena menyebabkan informasi baru dari tahap awal ssh-startdiabaikan. Mengubah definisi alias tuntuk dikutip secara tunggal di .zshrc saya memberikan perilaku yang jauh lebih baik:

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`

Perhatikan perluasan definisi tseperti yang disediakan oleh which t, yang menunjukkan efek tanda kutip ganda (ekspansi langsung di tempat atau variabel lingkungan) vs tanda kutip tunggal (evaluasi tertunda perintah dan variabel).


sumber