Saya ingin memiliki jalur berwarna yang dapat dibaca. Sebagai contoh, alih-alih hanya menggunakan% ~ untuk kembali, ~/path/to/foo
saya ingin memformatnya ~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo
untuk menyorot pemisah jalur.
Bisakah saya mendefinisikan konten PROMPT sehingga ekspresi jalur akan dievaluasi kembali pada setiap tampilan? Sesuatu seperti ${${(%):-%~}//\//_some_format_expression/}
jelas tidak berfungsi.
Atau haruskah saya meretas ini lebih lanjut, dan memaksakan nilai PROMPT untuk mendapatkan reset setiap kali kita mengubah direktori?
Solusi apa pun yang mencapai sasaran pemformatan jalur akan diterima.
Terima kasih :)
Jawaban:
zsh
Coba ini:
Berikut ini rincian dari prompt:
%{...%}
- urutan pelarian$(pwd|grep --color=always /)
- cetak direktori saat ini dan sorot/
- warna akan tergantung pada variabel lingkungan $ GREP_COLORS (atau nilai standarnya) - tebal merah adalah default%${#PWD}G
- gunakan panjang karakter karakter dari direktori saat ini sebagai nilai kesalahan. Ini membuat shell menganggap ini sebagai panjang dari urutan karakter sebelumnya (setelah "%{
") alih-alih panjang sebenarnya dari string yang mencakup urutan escape ANSI. Ini menjaga shell agar tidak bingung tentang posisi kursor relatif terhadap akhir prompt.- - - - - - - ini adalah akhir dari bagian yang menjawab pertanyaan Anda - - - - - - -
%(!.%F{red}.%F{cyan})
- jika ini adalah shell istimewa (root) atur warna foreground menjadi merah, jika tidak cyan%n
- Keluarkan nama pengguna%f
- mengatur ulang warna latar depan ke default@
- Tanda harafiah%F{yellow}
- membuat warna foreground menjadi kuning%m
- Keluarkan nama host%f
- mengatur ulang warna latar depan ke default%(!.%F{red}.)
- jika ini adalah shell istimewa (root) atur warna foreground menjadi merah%#
- Output a#
untuk shell istimewa atau%
untuk shell yang tidak terjangkau%f
- mengatur ulang warna latar depan ke defaultSaya menempatkan jalan pertama dalam prompt ini untuk penekanan, karena pertanyaannya menyangkut jalan.
Ini adalah versi untuk zsh yang mengubah warna garis miring tergantung pada apakah Anda root (diistimewakan) dengan memanipulasi
$GREP_COLORS
variabel:Pesta
Anda dapat melakukan prompt serupa di Bash. Dalam contoh ini, saya telah menempatkan pengguna dan nama host terlebih dahulu dan warna garis miring juga berubah ketika UID adalah 0. Peringatan: ini menimpa
$PS1
variabel prompt Bash . Itu seharusnya tidak menjadi masalah kecuali jika Anda melakukan sesuatu yang istimewa atau Anda mengharapkan perilaku berubah ketika Anda mengatur variabel itu secara langsung dan ini berlaku. Juga, ini menggunakan variabel yang disebut "usercolor
" yang mungkin bertabrakan dengan sesuatu yang lain, meskipun semua ini bisa dimasukkan ke dalam fungsi dan variabel dideklarasikan secara lokal.Saya mengambil keuntungan dari fakta bahwa Bash tidak memiliki fitur "glitch" zsh untuk menggunakan substitusi ekspansi parameter untuk secara kondisional mewarnai garis miring (daripada menggunakan grep).
sumber
PS1="$(pwd)"; PS1="${debian_chroot:+($debian_chroot)}\[$bldgrn\]\u@$(fgcolor $hostnamecolor)\h$(resetcolor)\[$txtrst\]:\[$bldblu\]${PS1//\//$txtred/$bldblu}\[\e[00m\]$bldred\$(parse_git_branch)\[$txtrst\] \[$undcyn\]\T \d\[$txtrst\] 95\$ "
warna-warna yang ditentukan di github.com/ibrahima/dotfiles/blob/master/.bashrc.d/prompt.shSetelah beberapa berkeliling, saya dapat memberikan solusi mengesampingkan
chpwd
:my_path
var sementara ? Saya tidak bisa langsung mengganti / inside% ~ ...doprompt
mungkin lebih bersih.sumber
Solusi zsh murni:
${(%):-%~}
adalah jalur saat ini.${xxxxx//\//${PR_BOLD_RED}/%f}
mengganti setiap / di xxxxx oleh yang berwarna merah tebalSaya telah menggunakan tanda kutip ganda dalam tes saya, yang tidak memungkinkan substitusi. Semuanya bekerja dengan baik dengan tanda kutip tunggal.
sumber
$PR_BOLD_RED
mendefinisikan di tempat lain. Saya harus menggunakanPROMPT='%n@%m: %{%B%F{red}%}${${(%):-%~}//\//%B%F{red\}/%b%f}%b%f '
termasuk pelarian yang sangat aneh dari kurung kurawal penutupan (hanya) setelah yang kedua "merah".Ini usaha saya (berdasarkan NicDumZ's):
Perbedaannya adalah bahwa saya menggunakan jalur berwarna, jadi saya harus kembali ke warna asli saya untuk jalur setelah garis miring berwarna. Dalam kasus saya, jalan biasanya berwarna kuning, dan garis miring diwarnai dengan magenta, kemudian kembali menjadi kuning. Saya juga lebih suka menggunakan urutan% F% f karena tampak jauh lebih mudah dibaca untuk saya.
sumber