ฉันจะเปลี่ยนสีของพรอมต์ใน zsh (แตกต่างจากข้อความปกติ) ได้อย่างไร


122

เพื่อให้จดจำการเริ่มต้นและจุดสิ้นสุดของเอาต์พุตบนบรรทัดคำสั่งได้ดีขึ้นฉันต้องการเปลี่ยนสีของพรอมต์เพื่อให้แตกต่างจากเอาต์พุตของโปรแกรมอย่างเห็นได้ชัด ในขณะที่ฉันใช้ zsh ใครช่วยให้คำแนะนำฉันได้ไหม

คำตอบ:


59

นี่คือตัวอย่างวิธีตั้งค่าพรอมต์สีแดง:

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

เวทมนตร์คือ\e[0;31m(เปิดพื้นหน้าสีแดง) และ\e[0m(ปิดคุณลักษณะของอักขระ) สิ่งเหล่านี้เรียกว่าลำดับการหลบหนี ลำดับการหลีกเลี่ยงที่แตกต่างกันให้ผลลัพธ์ที่แตกต่างกันตั้งแต่การวางตำแหน่งเคอร์เซอร์แบบสัมบูรณ์ไปจนถึงสีไปจนถึงความสามารถในการเปลี่ยนแถบหัวเรื่องของหน้าต่างของคุณและอื่น ๆ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับลำดับการหลบหนีโปรดดูรายการวิกิพีเดียในรหัสการหลีกเลี่ยง ANSI


3
ฉันใช้ PROMPT = '[%!]' ใน. zshrc ของฉัน คุณจะทำสีได้อย่างไร? ฉันรัน PROMPT = '\ e [0; 31m [%!] \ e [0m' ใน. zshrc ของฉันไม่สำเร็จ
LéoLéopold Hertz 준영

3
@ erikb85: ทำไมบอกว่าผิด? มีอะไรที่ฉันสามารถทำได้เพื่อให้คำตอบดีขึ้นหรือไม่? สำหรับฉันการทำข้างต้นทำให้ฉันมีสัญลักษณ์ดอลลาร์สีแดงดังนั้นฉันไม่เข้าใจว่าทำไมคุณถึงคิดว่ามันผิด
Bryan Oakley

4
มันใช้งานได้ แต่ $ ก่อนสตริงทำให้ zshrc ผิดพลาด ข้อความจะวางไว้ทางด้านซ้ายเมื่อฉันใช้การจัดตาราง ฉันชอบ @Joe the Person answer
Moebius

1
ฉันเห็นด้วย @Moebius ฉันต้องการให้อันนี้ใช้งานได้ชัดเจนและเรียบง่าย แต่มันทำให้แท็บใน cd
ยุ่งไปหมด

2
ฉันคิดว่า zsh ไม่ต้องการสิ่งที่หลบหนี ANSI แปลก ๆ ... ต้องมีคำตอบที่ดีกว่านี้ ...
Charlie Parker

264

ใส่สิ่งนี้ใน~/.zshrc:

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

สีที่รองรับ:
red` blue` green, cyan` yellow` magenta, black& white(จากคำตอบนี้ ) แม้ว่าคอมพิวเตอร์แต่ละเครื่องอาจมีตัวเลือกที่ใช้ได้แตกต่างกัน

รหัสสีรอบทิศทาง (และอักขระอื่น ๆ ที่ไม่สามารถพิมพ์ได้) ด้วย%{....%}. เพื่อให้การตัดข้อความทำงานได้อย่างถูกต้อง

นอกจากนี้ที่นี่เป็นวิธีที่คุณจะได้รับนี้ในการทำงานกับไดเรกทอรีตัดจากที่นี่

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%(5~|%-1~/.../%3~|%4~) %{$reset_color%}%% "

3
เห็นด้วยกับคำตอบที่เหนือกว่า (โชคดีที่คำตอบนี้เป็นผลลัพธ์ที่สามของ Google)
new123456

3
ไม่ได้ผลสำหรับฉัน :(zsh: colors: function definition file not found
balki

คุณใช้ ZSH4 หรือไม่? ฉันไม่คิดว่ามันใช้ได้กับเวอร์ชันที่น้อยกว่า 4.3.11 หากคุณมีเวอร์ชันล่าสุดอาจจะใช้ไฟล์ไม่ถูกต้อง
Joe the Person

ค่าสีที่ถูกต้องคืออะไร?
chakrit

12
%{...%}หมายความว่าเนื้อหาจะตีความว่าเป็นลำดับหนีตัวอักษรเพื่อให้เคอร์เซอร์เคยชินย้ายในขณะที่พิมพ์ลำดับ หากคุณไม่ใช้สิ่งนี้รหัสสีสามารถเลื่อนเคอร์เซอร์และสร้างเอฟเฟกต์ที่ไม่ต้องการได้ นี่คือเอกสารในVisual Effectsส่วนในzshmisc man page
Bruno Penteado

69

Zsh มาพร้อมกับพรอมต์สีในตัว ลอง

autoload -U promptinit && promptinit

จากนั้นprompt -lแสดงรายการพร้อมต์ที่มี-p fireแสดงตัวอย่างพรอมต์ "ไฟ" -s fireตั้งค่า

เมื่อคุณพร้อมที่จะเพิ่มข้อความแจ้งให้เพิ่มสิ่งนี้ใต้บรรทัดโหลดอัตโนมัติด้านบน:

prompt fade red

มีวิธีแต่งสีธีมทั้งหมดหรือไม่? ฉันชอบ walters prompt แต่อยากให้เป็นสีแดง
Pat Myron

25

ฉันไม่คิดว่าสิ่งautoload -U colors && colorsนี้จำเป็นอีกต่อไปและสามารถทำได้:

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

เพื่อให้บรรลุผลเช่นเดียวกับคำตอบของ FireDude ดูเอกสาร ZSHสำหรับข้อมูลเพิ่มเติม


FYI ฉันเพิ่งลองใน Ubunutu 11.04 และสีไม่ได้ผลสำหรับฉันหากไม่มีautoload -U colors && colors
dpc.pw

2
แปลก. ใช้งานได้กับฉันบน OS X และ Ubuntu 10.04
Andrew Marshall

@Andrew Marshall ใช่ แต่มีแนวโน้มที่จะทำงานร่วมกับautoloadใน
Joe the Person

@ fireDude67 ตั้งค่ายังautoload onไง?
balki

1
หากคุณไม่ต้องการautoload -U colorsนั่นหมายความว่า distro ของคุณมีอยู่แล้วในไฟล์เริ่มต้น zsh อื่น ๆ คุณควรรวมไว้ในสคริปต์ที่คุณตั้งใจจะแชร์กับผู้อื่น
kindall

25

สีที่มีจำหน่าย:

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

                                      


ตัวแปรที่มี:

  • %F{118} (1 ถึง 256)
  • $FG[018] (1 ถึง 256)
  • $fg[magenta] (ม่วงแดง, แดง, ขาว, เหลือง, ดำ, น้ำเงิน, ฟ้า, เขียว)

ตัวอย่างพร้อมท์:

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

การจับกุม

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

การจับกุม


ติดตั้ง:

ต้องเพิ่มนิยามตัวแปร (PS1 / PROMPT) ~/.zshrc

เราสามารถกำหนดตัวแปร PS1 ใหม่ในพรอมต์ปัจจุบันเพื่อทดสอบได้ทันที (ไม่บันทึกการเปลี่ยนแปลง)


15

คำตอบของ Bryan Oakley ข้างต้นมีข้อผิดพลาดตามที่ได้ชี้ให้เห็นแล้วและโซลูชันที่นำเสนอโดย Andrew Marshall แม้ว่าจะไม่ได้มีความผิดพลาด แต่ก็ไม่ได้ทำให้ชัดเจนสำหรับการปรับแต่งสีที่ใช้มากเกินไป

เนื่องจาก macOS Catalina ขอให้ zsh เป็นเชลล์เริ่มต้นจากนี้ไปฉันคิดว่าหลาย ๆ คนอาจต้องการปรับแต่งการแจ้งเตือนของตนและอาจมาที่นี่เพื่อรับคำตอบ ดังนั้นฉันคิดว่าฉันจะพยายามสรุปให้กว้างขึ้นและสัมผัสกับแนวคิดอื่น ๆ ที่เกี่ยวข้องอย่างใกล้ชิดซึ่งช่วยให้สามารถปรับแต่งได้มากขึ้น

รหัส 3 หลักสำหรับสีต่างๆ ครั้งแรกของทั้งหมดที่นี่เราสามารถหารหัส 3 หลักสำหรับสีต่างๆ: https://unix.stackexchange.com/a/124409/194343 ตัวอย่างเช่น 214 เป็นสีส้มบางชนิด

เบื้องหน้าและความเป็นมา ข้อมูลสำคัญอื่น ๆ คือสำหรับสีพื้นFและ bac Kเราสามารถกำหนดสิ่งที่ต้องการด้วยFและKตามลำดับ แหล่งที่มาเป็นคู่มือ zsh เกี่ยวกับเอฟเฟกต์ภาพ: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

ตัวอย่างเช่นสองคำสั่งต่อไปนี้

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

นำเสนอชื่อโฮสต์เป็นสีส้มพร้อมพื้นหลังสีดำตามด้วยเครื่องหมายจุดคู่เป็นสีขาวพื้นหลังสีดำตามด้วยไดเร็กทอรีการทำงานปัจจุบันเป็นสีน้ำเงินสดใสพร้อมพื้นหลังสีดำตามด้วยเครื่องหมายดอลลาร์เป็นสีขาวพื้นหลังสีดำ

ดูข้อมูลเพิ่มเติมที่เกี่ยวข้องด้านล่าง

แจ้งข้อมูลทางด้านขวามือ ตัวอย่างเช่นการเพิ่มการประทับเวลา ดูhttps://superuser.com/a/1251045/290299 แน่นอนว่าสิ่งนี้สามารถกำหนดรหัสสีได้เช่นมีสีฟ้า / ม่วงอ่อน ๆ เช่นนี้:

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

สีสำหรับls. หลังจากอ่านคู่มือสำหรับ ls ตัวอย่างเช่นหนึ่งสามารถเปิดใช้งานสีlsโดยใช้สองคำสั่งต่อไปนี้:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

สุดท้ายเป็นคำพูดสุดท้ายที่ฉันไม่ได้ทดสอบเพราะฉันพอใจกับการกำหนดค่าของฉันช่องทางอื่นอาจมีคนติดตั้งพอร์ตcoreutilsจากMacPortsแล้วใช้gdircolors(ที่มา: https://unix.stackexchange.com/a/174596 / 194343 ). (ฉันอาจแก้ไขส่วนสุดท้ายนี้ในอนาคตเนื่องจากทั้งหมดข้างต้นเป็นส่วนที่เกี่ยวข้องซึ่งทำให้ชีวิตประจำวันสนุกขึ้นและรับมือได้ง่ายขึ้น)


1
นี่เป็นคำตอบที่มีประโยชน์อย่างมาก ขอบคุณที่รวบรวมสิ่งนี้ไว้ด้วยกัน
shaunakde

@shaunakde ยินดีต้อนรับ! :)
MightyMouse

4

ฉันพบว่าด้วย zsh5 (ค่าเริ่มต้นใน Debian Jessie) โซลูชันเหล่านี้ทั้งหมดใช้งานได้:

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

ตอนนี้พวกเขามีปัญหา: พวกเขาจะเลื่อนเคอร์เซอร์ส่งผลให้เกิดรูปลอกที่น่าเกลียดเมื่อแท็บ (สำหรับการเติมอัตโนมัติ) %{FOOBAR%}การแก้ปัญหาก็คือจะล้อมรอบลำดับหนีด้วย ใช้เวลาสักพักเพื่อคิดสิ่งนี้ สำหรับcolorsโมดูลการโหลดโซลูชันที่ 2 และ 3 เป็นข้อบังคับ เพื่อให้โซลูชันแรกสามารถอ่านได้เพียงกำหนดตัวแปรสำหรับสีที่คุณใช้


2

หากต้องการรับพร้อมต์ที่มีสีขึ้นอยู่กับสถานะการออกของคำสั่งสุดท้ายคุณสามารถใช้สิ่งนี้:

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

เพียงเพิ่มบรรทัดนี้ใน~/.zshrcไฟล์.

เอกสารแสดงรายการตัวยึดที่เป็นไปได้


นี่เป็นทางออกที่ดีที่สุดที่นี่ขอบคุณมาก
Eddy Ekofo

2

ลองสิ่งที่ฉันชอบ: ใส่เข้าไป

~/.zshrc

บรรทัดนี้:

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

อย่าลืม

source ~/.zshrc

เพื่อทดสอบการเปลี่ยนแปลง

คุณสามารถเปลี่ยนสี / รหัสสีได้แน่นอน :-)


0

man zshall และค้นหา PROMPT EXPANSION

หลังจากอ่านคำตอบที่มีอยู่ที่นี่มีหลายคำที่ขัดแย้งกัน ฉันได้ลองใช้แนวทางต่างๆในระบบที่ใช้ zsh 4.2 และ 5+ และพบว่าสาเหตุที่คำตอบเหล่านี้ขัดแย้งกันคือพวกเขาไม่ได้บอกว่า ZSH รุ่นใดที่พวกเขากำหนดเป้าหมายไว้ เวอร์ชันต่างๆใช้ไวยากรณ์ที่แตกต่างกันสำหรับสิ่งนี้และบางเวอร์ชันต้องการการโหลดอัตโนมัติหลายแบบ

ดังนั้นทางออกที่ดีที่สุดคือการจัดการ zshall และค้นหา PROMPT EXPANSION เพื่อค้นหากฎทั้งหมดสำหรับการติดตั้ง zsh โดยเฉพาะของคุณ หมายเหตุในความคิดเห็นสิ่งต่างๆเช่น "ฉันใช้ Ubuntu 11.04 หรือ 10.4 หรือ OSX" ไม่มีความหมายมากนักเนื่องจากไม่ชัดเจนว่าคุณใช้ ZSH เวอร์ชันใด Ubuntu 11.04 ไม่ได้หมายความถึง ZSH เวอร์ชันใหม่กว่า ubuntu 10.04 อาจมีสาเหตุหลายประการที่ติดตั้งเวอร์ชันเก่า สำหรับเรื่องนั้น ZSH เวอร์ชันที่ใหม่กว่าไม่ได้หมายความว่าจะใช้ไวยากรณ์ใดโดยไม่ทราบว่าเป็น ZSH เวอร์ชันใด


0

เพื่อเสริมคำตอบทั้งหมดข้างต้นเคล็ดลับที่สะดวกอีกประการหนึ่งคือการตั้งค่าพรอมต์สีลงในฟังก์ชัน zsh คุณสามารถกำหนดตัวแปรโลคัลเพื่อแทนคำสั่งที่ยาวขึ้นเช่นrc=$reset_colorหรือกำหนดตัวแปรสีของคุณเอง อย่าลืมวางลงใน.zshrcไฟล์ของคุณและเรียกใช้ฟังก์ชันที่คุณกำหนดไว้:

# 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.