Dapatkan Fungsi Ke PS1 (Zsh)?

15

Ini berfungsi di bash( parse_git_branchadalah fungsi yang ditentukan)

export PS1="\$(parse_git_branch)"

Tetapi saya tidak dapat menemukan persamaannya di zsh.

Catatan: Jika saya melakukannya

PROMPT="$(parse_git_branch)"

Tampaknya berfungsi, tetapi sebenarnya itu menjalankan perintah ketika saya mengatur prompt, yang bukan itu intinya.

Dan Rosenstark
sumber

Jawaban:

26

Anda harus memasukkan

setopt PROMPT_SUBST

di Anda .zshrc, man zshalljelaskan di bagian PROMPT EXPANSION :

Jika opsi PROMPT_SUBST diatur, string prompt pertama-tama dikenai ekspansi parameter, substitusi perintah, dan ekspansi aritmatika.

akira
sumber
14

Sebenarnya masalah Anda bukan hanya pengaturan PROMPT_SUBST: Anda menggunakan tanda kutip ganda dalam skrip Anda memaksa evaluasi fungsi ketika Anda mengatur PROMPTvariabel. Anda hanya ingin evaluasi ketika prompt dihitung yaitu Anda harus menggunakan tanda kutip tunggal.

JN
sumber
5

Seperti kata akira, Anda harus menggunakan subtitle cepat. Ini adalah kode awal saya (masih mengerjakannya):

setopt PROMPT_SUBST
PROMPT='$(parse_git_branch)'

atau lebih baik

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) %(!.#.$)'
Dan Rosenstark
sumber