Masalah

Saya telah menginstal zsh saya di mac OS catalina dan menggunakan iTerm2 sebagai terminal. Saya menggunakan tema robbyrussell.zsh-theme dan telah memodifikasinya untuk mencetak email git di Prompt (Info lebih lanjut di sini ). Saya telah memodifikasi robbyrussell.zsh-theme menjadi ini:

PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT+=' %{$fg[cyan]%}%~%{$reset_color%} $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[blue]%}$(git_current_user_email)["
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] %{$fg[green]%}✔"

Ketika saya pindah ke direktori git, itu tidak mengambil email pengguna dari .git/config lokal atau dari ~/.git/config global.

Penelitian yang dilakukan:

Saya membaca beberapa stackoverflow dan artikel lain dan mencoba banyak hal tetapi tidak berhasil.

Pendekatan yang berhasil bagi saya adalah membuat alias untuk beralih di antara dua alamat email:

home='git config user.email "<homeemail>" && source ~/.zshrc'
work='git config user.email "<workemail>" && source ~/.zshrc'

Tetapi saya harus menjalankan perintah ini setiap saat untuk membuat Prompt mengambil email meskipun diatur dalam konfigurasi git lokal.

Adakah yang bisa membantu mengenai apa yang perlu dilakukan agar zsh meminta untuk membaca email pengguna git secara langsung ketika kami melakukan cd ke repo?

2
codenoob 8 Mei 2021, 14:33

1 menjawab

Jawaban Terbaik

Ini terjadi karena ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[blue]%}$(git_current_user_email)[" menggunakan tanda kutip ganda, yang menyebabkan $(git_current_user_email) dievaluasi hanya sekali ketika robbyrussell.zsh-theme bersumber, bukan untuk setiap prompt.

Anda dapat mengonfirmasi ini dengan menjalankan echo "$ZSH_THEME_GIT_PROMPT_PREFIX", yang sekarang seharusnya berisi alamat email, bukan $(git_current_user_email) literal.

Sayangnya Anda tidak dapat menggunakan tanda kutip tunggal (yang tidak mengevaluasi penggantian) di sini. Saat itu Anda akan melihat $(git_current_user_email) literal di Prompt Anda, karena fungsi git_prompt_info (yang menggunakan ZSH_THEME_GIT_PROMPT_PREFIX secara internal) tidak mengevaluasinya.

Namun yang dapat Anda lakukan adalah memasukkan $(git_current_user_email) langsung ke PROMPT, yang dievaluasi pada setiap prompt baru.

Sesuatu seperti ini:

PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT+=' %{$fg[cyan]%}%~%{$reset_color%} $(git_current_user_email) $(git_prompt_info)'

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[blue]%}["
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] %{$fg[green]%}✔"

(Juga perhatikan bagaimana PROMPT memiliki tanda kutip tunggal, bukan tanda kutip ganda).

Anda juga dapat menghapus ZSH_THEME_GIT_PROMPT_PREFIX sepenuhnya dan memasukkannya ke dalam PROMPT juga, jika Anda ingin email Anda berwarna biru.

Detail lebih lanjut tentang gaya kutipan dan substitusi yang berbeda dapat ditemukan di sini: https://mywiki.wooledge.org/Quotes< /a>

1
mihi 12 Mei 2021, 13:28