Bagaimana cara mengubah warna prompt saya dalam zsh (berbeda dari teks normal)?

121

Untuk lebih mengenali awal dan akhir keluaran pada baris perintah, saya ingin mengubah warna prompt saya, sehingga tampak berbeda dari keluaran program. Saat saya menggunakan zsh, adakah yang bisa memberi saya petunjuk?

Mnementh
sumber

Jawaban:

58

Berikut adalah contoh cara menyetel prompt merah:

PS1=$'\e[0;31m$ \e[0m'

Keajaibannya adalah \e[0;31m(nyalakan latar depan merah) dan \e[0m(matikan atribut karakter). Ini disebut urutan pelarian. Urutan pelolosan yang berbeda memberi Anda hasil yang berbeda, dari posisi kursor absolut, warna, kemampuan untuk mengubah bilah judul jendela Anda, dan seterusnya.

Untuk mengetahui lebih lanjut tentang escape sequence, lihat entri wikipedia tentang kode escape ANSI

Bryan Oakley
sumber
3
Saya menggunakan PROMPT = '[%!]' Di .zshrc saya. Bagaimana Anda bisa mewarnainya? Saya tidak berhasil menjalankan PROMPT = '\ e [0; 31m [%!] \ E [0m' di .zshrc saya.
Léo Léopold Hertz 준영
3
@ erikb85: kenapa kamu bilang itu salah? Adakah yang bisa saya lakukan untuk membuat jawabannya lebih baik? Bagi saya, melakukan hal di atas memberi saya tanda dolar merah, jadi saya tidak mengerti mengapa menurut Anda itu salah.
Bryan Oakley
4
Ini berfungsi, tetapi $ sebelum string membuat zshrc menjadi glitch. Teks diletakkan di sebelah kiri saat saya menggunakan tabulasi. Saya lebih suka @Joe the Person menjawab
Moebius
1
Saya setuju @Moebius Saya ingin yang ini berfungsi dengan jelas dan sederhana, tetapi itu benar-benar mengacaukan tab di cd
diek
2
Saya pikir zsh tidak membutuhkan barang-barang pelarian ANSI yang aneh ... pasti ada jawaban yang lebih baik ...
Charlie Parker
264

Taruh ini di ~/.zshrc:

autoload -U colors && colors
PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% "

Warna yang didukung:
red, blue, green, cyan, yellow, magenta, black, & white(dari jawaban ini ) meskipun komputer yang berbeda mungkin memiliki pilihan yang valid yang berbeda.

Kode warna sekeliling (dan karakter lain yang tidak dapat dicetak) dengan %{....%}. Ini agar pembungkusan teks berfungsi dengan benar.

Selain itu, berikut adalah bagaimana Anda bisa membuatnya bekerja dengan pemangkasan direktori dari sini .

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "
Joe the Person
sumber
3
Setuju, sejauh ini jawaban yang lebih unggul (untungnya jawaban ini adalah hasil Google yang ketiga;)
new123456
3
tidak bekerja untuk saya. :(zsh: colors: function definition file not found
balki
Apakah Anda menggunakan ZSH4? Saya tidak berpikir ini berfungsi pada versi kurang dari 4.3.11. Jika Anda memiliki versi terbaru mungkin itu tidak menggunakan file yang tepat.
Joe the Person
Apa nilai warna yang valid?
chakrit
12
yang %{...%}berarti bahwa konten akan ditafsirkan sebagai urutan escape literal, sehingga kursor wont bergerak saat mencetak urutan. Jika Anda tidak menggunakan ini, kode warna sebenarnya dapat menggerakkan kursor dan menghasilkan efek yang tidak diinginkan. Ini didokumentasikan di Visual Effectsbagian manual zshmisc
Bruno Penteado
69

Zsh dilengkapi dengan petunjuk berwarna bawaan. Mencoba

autoload -U promptinit && promptinit

dan kemudian prompt -ldaftar prompt yang tersedia, -p firepratinjau prompt "api", -s fireset itu.

Saat Anda siap untuk menambahkan prompt, tambahkan sesuatu seperti ini di bawah baris muat otomatis di atas:

prompt fade red
Mitro
sumber
Apakah ada cara untuk mewarnai semua tema? Saya suka prompt walters tetapi ingin berwarna merah.
Pat Myron
25

Saya tidak berpikir autoload -U colors && colorsitu diperlukan lagi dan seseorang dapat dengan mudah melakukan:

PS1="%{%F{red}%}%n%{%f%}@%{%F{blue}%}%m %{%F{yellow}%}%~ %{$%f%}%% "

untuk mencapai hasil yang sama dengan jawaban FireDude . Lihat dokumentasi ZSH untuk info lebih lanjut.

Andrew Marshall
sumber
FYI. Saya baru saja mencoba di Ubunutu 11.04 dan warna tidak bekerja untuk saya tanpaautoload -U colors && colors
dpc.pw
2
Aneh. Bekerja untuk saya di OS X & Ubuntu 10.04.
Andrew Marshall
@ Andrew Marshall Ya, tetapi kemungkinan besar akan bekerja sama autoload.
Joe the Person
@ fireDude67 Bagaimana cara mengatur autoload on?
balki
1
Jika Anda tidak membutuhkannya autoload -U colors, itu berarti distro Anda sudah memilikinya di beberapa file inisialisasi zsh lainnya. Anda tetap harus memasukkannya ke dalam skrip yang ingin Anda bagikan dengan orang lain.
kindall
23

Warna yang Tersedia:

for i in {1..256}; do print -P "%F{$i}Color : $i"; done;

                                      


Variabel yang Tersedia:

  • %F{118} (1 hingga 256)
  • $FG[018] (1 hingga 256)
  • $fg[magenta] (magenta, merah, putih, kuning, hitam, biru, cyan, hijau)

Contoh Prompt:

PS1='%(?.%F{green}.%F{green})%n@%m:%~%# %f'

Menangkap

PS1='%{$fg[gray]%}[%T][%n@%m%{$reset_color%}:%c%{$reset_color%}%{$fg[gray]%}$(git_prompt_info)]$(prompt_char)%{$reset_color%} ' 

Menangkap


Install:

Definisi variabel (PS1 / PROMPT) perlu ditambahkan ke ~/.zshrc

Kami juga dapat mendefinisikan ulang variabel PS1 pada prompt saat ini untuk mengujinya segera (perubahan tidak disimpan).

intika
sumber
15

Jawaban Bryan Oakley di atas memiliki kesalahan seperti yang telah ditunjukkan dan solusi yang ditawarkan oleh Andrew Marshall meskipun tidak membawa kesalahan, namun tidak terlalu memperjelas karena terlalu banyak penyesuaian pada warna yang digunakan.

Karena macOS Catalina meminta zsh menjadi shell default mulai sekarang, saya pikir beberapa orang lagi mungkin ingin menyesuaikan prompt mereka dan mungkin datang ke sini untuk mendapatkan jawaban. Jadi, saya pikir saya akan mencoba memberikan ringkasan yang lebih luas dan menyentuh gagasan lain yang sangat terkait erat yang memungkinkan lebih banyak penyesuaian.

Kode 3-Digit untuk Berbagai Warna. Pertama-tama, di sini kita dapat menemukan kode 3 digit untuk berbagai warna: https://unix.stackexchange.com/a/124409/194343 . Misalnya, 214 adalah semacam warna oranye.

Latar Depan dan Latar Belakang. Informasi penting lainnya adalah bahwa untuk warna dasar F oreground dan bac K seseorang dapat menentukan apa yang mereka inginkan dengan masing-masing F dan K. Sumber adalah manual zsh tentang efek visual: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Jadi, misalnya, dua perintah berikut

autoload -U colors && colors
export PS1="%F{214}%K{000}%m%F{015}%K{000}:%F{039}%K{000}%~%F{015}%K{000}\$ "

menyajikan nama host dalam warna oranye dengan latar belakang hitam, diikuti oleh titik dua putih dengan latar belakang hitam, diikuti oleh direktori kerja saat ini dengan warna biru cerah dengan latar belakang hitam, diikuti dengan tanda dolar putih dengan latar belakang hitam.

Informasi lebih terkait ditemukan di bawah.

Informasi yang cepat di sisi kanan. Misalnya, menambahkan stempel waktu. Lihat https://superuser.com/a/1251045/290299 . Tentu saja, ini dapat diberi kode warna, misalnya dengan beberapa warna biru muda / ungu, seperti ini:

RPROMPT="%F{111}%K{000}[%D{%f/%m/%y}|%@]"

Warna untuk ls. Setelah membaca manual untuk ls, salah satu contohnya dapat mengaktifkan warna untuk lsmenggunakan dua perintah berikut:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Akhirnya, sebagai komentar terakhir yang belum saya uji karena saya senang dengan konfigurasi saya, jalan lain mungkin bagi seseorang untuk menginstal port coreutilsdari MacPorts dan kemudian menggunakan gdircolors(sumber: https://unix.stackexchange.com/a/174596 / 194343 ). (Saya dapat mengedit bagian terakhir ini di masa mendatang karena semua hal di atas adalah bagian terkait yang membuat kehidupan sehari-hari jauh lebih menyenangkan dan lebih mudah untuk ditangani.)

MightyMouse
sumber
1
Ini adalah jawaban yang sangat membantu. Terima kasih telah menyusun ini.
shaunakde
@shaunakde Sama-sama! :)
MightyMouse
4

Saya telah menemukan bahwa, dengan zsh5 (yang default di Debian Jessie), semua solusi tersebut berfungsi:

  • $'\e[00m
  • $fg[white]
  • $fg{white}

Sekarang, mereka punya masalah: mereka akan memindahkan kursor, menghasilkan stiker yang jelek saat tabbing (untuk pelengkapan otomatis). Solusinya adalah dengan mengelilingi rangkaian pelarian dengan %{FOOBAR%}. Butuh beberapa saat untuk memikirkan ini. Untuk solusi ke-2 dan ke-3, colorsmodul pemuatan adalah wajib. Agar solusi pertama tetap terbaca, cukup tentukan variabel untuk warna yang Anda gunakan.

pengguna3459474
sumber
2

Untuk mendapatkan prompt dengan warna yang bergantung pada status keluar perintah terakhir, Anda dapat menggunakan ini:

PS1='%(?.%F{green}.%F{red})%n@%m:%~%# %f'

Tambahkan saja baris ini ke ~/.zshrc.

The dokumentasi daftar mungkin penampung.

Martin
sumber
Ini adalah solusi terbaik disini, Terima kasih banyak.
Eddy Ekofo
2

Coba favorit saya: masukkan

~/.zshrc

garis ini:

PROMPT='%F{240}%n%F{red}@%F{green}%m:%F{141}%d$ %F{reset}'

jangan lupa

source ~/.zshrc

untuk menguji perubahan

Anda dapat mengubah warna / kode warna, tentu saja :-)

Hermann Schwarz
sumber
0

man zshall dan cari PROMPT EKSPANSI

Setelah membaca jawaban yang ada di sini, beberapa di antaranya saling bertentangan. Saya telah mencoba berbagai pendekatan pada sistem yang menjalankan zsh 4.2 dan 5+ dan menemukan bahwa alasan jawaban ini bertentangan adalah karena mereka tidak mengatakan versi ZSH mana yang mereka targetkan. Versi yang berbeda menggunakan sintaks yang berbeda untuk ini dan beberapa di antaranya memerlukan pemuatan otomatis yang berbeda.

Jadi, taruhan terbaik mungkin adalah man zshall dan mencari PROMPT EXPANSION untuk mengetahui semua aturan untuk instalasi zsh khusus Anda. Perhatikan di komentar, hal-hal seperti "Saya menggunakan Ubuntu 11.04 atau 10.4 atau OSX" Tidak terlalu berarti karena tidak jelas versi ZSH yang Anda gunakan. Ubuntu 11.04 tidak menyiratkan versi ZSH yang lebih baru daripada ubuntu 10.04. Mungkin ada sejumlah alasan mengapa versi yang lebih lama diinstal. Dalam hal ini, versi ZSH yang lebih baru tidak menyiratkan sintaks mana yang harus digunakan tanpa mengetahui versi ZSH itu.

cs_alumnus
sumber
0

Untuk melengkapi semua jawaban di atas, trik mudah lainnya adalah menempatkan pengaturan prompt berwarna ke dalam fungsi zsh. Di sana Anda dapat mendefinisikan variabel lokal ke perintah alias yang lebih panjang, misalnya rc=$reset_coloratau menentukan variabel warna Anda sendiri. Jangan lupa untuk menempatkannya ke dalam .zshrcfile Anda dan memanggil fungsi yang telah Anda tentukan:

# Coloured prompt
autoload -U colors && colors
function myprompt {
  local rc=$reset_color
  export PS1="%F{cyan}%n%{$rc%}@%F{green}%m%{$rc%}:%F{magenta}%~%{$rc%}%# "
}
myprompt
mabalenk.dll
sumber