Làm cách nào để thay đổi màu của lời nhắc trong zsh (khác với văn bản bình thường)?


121

Để nhận biết tốt hơn điểm bắt đầu và kết thúc đầu ra trên dòng lệnh, tôi muốn thay đổi màu của lời nhắc của mình, để nó khác rõ ràng với đầu ra của chương trình. Khi tôi sử dụng zsh, bất cứ ai có thể cho tôi một gợi ý?

Câu trả lời:


57

Dưới đây là một ví dụ về cách đặt lời nhắc màu đỏ:

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

Điều kỳ diệu là \e[0;31m(bật nền đỏ) và \e[0m(tắt các thuộc tính của nhân vật). Chúng được gọi là trình tự thoát. Các trình tự thoát khác nhau cung cấp cho bạn các kết quả khác nhau, từ vị trí con trỏ tuyệt đối, đến màu sắc, để có thể thay đổi thanh tiêu đề của cửa sổ, v.v.

Để biết thêm về trình tự thoát, hãy xem mục nhập wikipedia về mã thoát ANSI


3
Tôi đang sử dụng PROMPT = '[%!]' Trong .zshrc của mình. Làm thế nào bạn có thể tô màu nó? Tôi chạy không thành công PROMPT = '\ e [0; 31 phút [%!] \ E [0 phút' trong tệp .zshrc của tôi.
Léo Léopold Hertz 준영

3
@ erikb85: sao bạn nói sai vậy? Tôi có thể làm gì để giúp câu trả lời tốt hơn không? Đối với mình làm như trên mang lại cho mình 1 ký hiệu đô la đỏ nên không hiểu sao bạn lại cho là sai.
Bryan Oakley

4
Nó đang hoạt động, nhưng $ trước chuỗi làm cho zshrc bị trục trặc. Văn bản được đặt ở bên trái khi tôi sử dụng bảng. Tôi thích câu trả lời @Joe Person
Moebius

1
Tôi đồng ý @Moebius Tôi muốn cái này hoạt động nó rõ ràng và đơn giản, nhưng nó hoàn toàn gây rối cho tab trên cd
diek 7/1017

2
Tôi nghĩ zsh không cần điên lạ thứ ANSI thoát ... thì phải có một câu trả lời tốt hơn ...
Charlie Parker

264

Đặt cái này vào ~/.zshrc:

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

Màu sắc được hỗ trợ:
red, blue, green, cyan, yellow, magenta, black, & white(từ câu trả lời này ) mặc dù các máy tính khác nhau có thể có các tùy chọn có giá trị khác nhau.

Mã màu bao quanh (và bất kỳ ký tự không thể in nào khác) với %{....%}. Điều này là để gói văn bản hoạt động chính xác.

Ngoài ra, đây là cách bạn có thể làm cho điều này hoạt động với việc cắt tỉa thư mục từ đây .

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

3
Đồng ý, đến nay là câu trả lời vượt trội (may mắn là câu trả lời này là kết quả của Google thứ ba;)
new123456

3
không làm việc cho tôi. :(zsh: colors: function definition file not found
balki

Bạn có đang sử dụng ZSH4 không? Tôi không nghĩ rằng nó hoạt động trên các phiên bản nhỏ hơn 4.3.11. Nếu bạn có phiên bản mới nhất có thể nó không sử dụng đúng tệp.
Joe the Person

Các giá trị màu hợp lệ là gì?
chakrit

12
các %{...%}phương tiện rằng nội dung sẽ được hiểu là một dãy thoát theo nghĩa đen, vì vậy con trỏ wont di chuyển trong khi in chuỗi. Nếu bạn không sử dụng điều này, các mã màu thực sự có thể di chuyển con trỏ và tạo ra các hiệu ứng không mong muốn. Đây là tài liệu trong Visual Effectsphần trong trang người đàn ông zshmisc
Bruno Penteado

69

Zsh đi kèm với nội dung lời nhắc màu. Thử

autoload -U promptinit && promptinit

và sau đó prompt -lliệt kê các lời nhắc có sẵn, -p firexem trước lời nhắc "chữa cháy", -s fiređặt nó.

Khi bạn đã sẵn sàng để thêm lời nhắc, hãy thêm nội dung như thế này bên dưới dòng tự động tải ở trên:

prompt fade red

Có cách nào để tô màu tất cả các chủ đề không? Tôi thích lời nhắc walters nhưng muốn nó có màu đỏ.
Pat Myron

24

Tôi không nghĩ điều autoload -U colors && colorsnày là cần thiết nữa và người ta có thể đơn giản làm:

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

để đạt được kết quả tương tự như câu trả lời của FireDude . Xem tài liệu ZSH để biết thêm thông tin.


FYI. Tôi vừa cố gắng trong Ubunutu 11,04 và màu sắc không làm việc cho tôi mà khôngautoload -U colors && colors
dpc.pw

2
Kỳ dị. Hoạt động cho tôi trên OS X và Ubuntu 10.04.
Andrew Marshall

@Andrew Marshall Có, nhưng nó có nhiều khả năng hoạt động hơn autoload.
Joe the Person,

@ fireDude67 Cách đặt autoload on?
balki

1
Nếu bạn không cần autoload -U colors, điều đó có nghĩa là bản phân phối của bạn đã có nó trong một số tệp khởi tạo zsh khác. Bạn vẫn nên đưa nó vào các tập lệnh mà bạn định chia sẻ với người khác.
kindall

23

Màu sắc có sẵn:

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

                                      


Các biến có sẵn:

  • %F{118} (1 đến 256)
  • $FG[018] (1 đến 256)
  • $fg[magenta] (đỏ tươi, đỏ, trắng, vàng, đen, xanh lam, lục lam, xanh lục)

Ví dụ nhắc nhở:

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

Chiếm lấy

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

Chiếm lấy


Tải về:

Định nghĩa biến (PS1 / PROMPT) cần được thêm vào ~/.zshrc

Chúng tôi cũng có thể xác định lại biến PS1 trên dấu nhắc hiện tại để kiểm tra nó ngay lập tức (các thay đổi không được lưu).


15

Câu trả lời của Bryan Oakley ở trên có một trục trặc vì nó đã được chỉ ra và giải pháp được đưa ra bởi Andrew Marshall mặc dù nó không có trục trặc, tuy nhiên nó không hiển nhiên cho việc tùy chỉnh quá nhiều màu sắc được sử dụng.

Vì macOS Catalina yêu cầu zsh làm shell mặc định từ bây giờ, tôi nghĩ rằng nhiều người có thể muốn tùy chỉnh lời nhắc của họ và có thể đến đây để tìm câu trả lời. Vì vậy, tôi nghĩ rằng tôi sẽ cố gắng đưa ra một bản tóm tắt rộng hơn và tiếp cận với các khái niệm liên quan chặt chẽ khác cho phép tùy chỉnh nhiều hơn.

Mã 3 chữ số cho nhiều màu sắc khác nhau. Trước hết, tại đây chúng ta có thể tìm thấy mã 3 chữ số cho nhiều màu sắc khác nhau: https://unix.stackexchange.com/a/124409/194343 . Ví dụ, 214 là một số loại màu cam.

Tiền cảnh và Nền. Thông tin quan trọng khác là đối với các màu nền F oreground và bac K, người ta có thể xác định những gì họ muốn với FK tương ứng. Nguồn là hướng dẫn sử dụng zsh về hiệu ứng hình ảnh: http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Visual-effects

Vì vậy, ví dụ, hai lệnh sau

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

trình bày tên máy chủ bằng màu cam với nền đen, tiếp theo là dấu hai chấm màu trắng nền đen, tiếp theo là thư mục làm việc hiện tại màu xanh lam sáng với nền đen, tiếp theo là ký hiệu đô la màu trắng nền đen.

Thông tin liên quan khác được tìm thấy bên dưới.

Thông tin nhanh chóng ở phía bên tay phải. Ví dụ: thêm dấu thời gian. Xem https://superuser.com/a/1251045/290299 . Tất nhiên, điều này có thể được mã hóa bằng màu, ví dụ như với một số màu xanh lam nhạt / tím, như sau:

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

Màu sắc cho ls. Sau khi đọc hướng dẫn sử dụng cho ls, một ví dụ có thể kích hoạt các màu lsbằng cách sử dụng hai lệnh sau:

export CLICOLOR=1
export LSCOLORS=gafacadabaegedabagacad

Cuối cùng, như một nhận xét cuối cùng rằng tôi chưa thử nghiệm vì tôi hài lòng với cấu hình của mình, một cách khác có thể dành cho ai đó cài đặt cổng coreutilstừ MacPorts và sau đó sử dụng gdircolors(nguồn: https://unix.stackexchange.com/a/174596 / 194343 ). (Tôi có thể chỉnh sửa phần cuối cùng này trong tương lai vì tất cả những phần trên đều là những phần liên quan giúp cuộc sống hàng ngày trở nên thú vị hơn và dễ đối phó hơn nhiều).


1
Đây là một câu trả lời vô cùng hữu ích. Cám ơn đã đưa này lại với nhau.
shaunakde

@shaunakde Bạn được chào đón! :)
MightyMouse

4

Tôi nhận thấy rằng, với zsh5 (mặc định trên Debian Jessie), tất cả các giải pháp đó đều hoạt động:

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

Bây giờ, họ có một vấn đề: họ sẽ di chuyển con trỏ, dẫn đến hình decal xấu xí khi tab (để tự động hoàn thành). Giải pháp đơn giản là bao quanh các chuỗi thoát với %{FOOBAR%}. Tôi đã mất một thời gian để tìm ra điều này. Đối với giải pháp thứ 2 và thứ 3, việc tải colorsmô-đun là bắt buộc. Để giữ cho giải pháp đầu tiên có thể đọc được, chỉ cần xác định các biến cho các màu bạn sử dụng.


2

Để nhận được lời nhắc có màu sắc tùy thuộc vào trạng thái thoát của lệnh cuối cùng, bạn có thể sử dụng điều này:

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

Chỉ cần thêm dòng này vào của bạn ~/.zshrc.

Các tài liệu liệt kê placeholders càng tốt.


Đây là giải pháp tốt nhất ở đây, Cảm ơn bạn rất nhiều.
Eddy Ekofo

2

Hãy thử yêu thích của tôi: đặt vào

~/.zshrc

đường thẳng này:

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

đừng quên

source ~/.zshrc

để kiểm tra những thay đổi

bạn có thể thay đổi màu sắc / mã màu, tất nhiên :-)


0

man zshall và tìm kiếm PROMPT MỞ RỘNG

Sau khi đọc các câu trả lời hiện có ở đây, một số câu trả lời mâu thuẫn với nhau. Tôi đã thử các cách tiếp cận khác nhau trên các hệ thống chạy zsh 4.2 và 5+ và thấy rằng lý do khiến các câu trả lời này mâu thuẫn nhau là chúng không cho biết chúng được nhắm mục tiêu vào phiên bản ZSH nào. Các phiên bản khác nhau sử dụng cú pháp khác nhau cho việc này và một số trong số chúng yêu cầu các bản tự động thay thế khác nhau.

Vì vậy, đặt cược tốt nhất có lẽ là man zshall và tìm kiếm MỞ RỘNG KHUYẾN MÃI để tìm ra tất cả các quy tắc cho cài đặt cụ thể của zsh. Lưu ý trong phần nhận xét, những thứ như "Tôi sử dụng Ubuntu 11.04 hoặc 10.4 hoặc OSX" không có ý nghĩa lắm vì không rõ bạn đang sử dụng phiên bản ZSH nào. Ubuntu 11.04 không ngụ ý một phiên bản ZSH mới hơn ubuntu 10.04. Có thể có bất kỳ lý do nào khiến phiên bản cũ hơn được cài đặt. Vì vậy, một phiên bản ZSH mới hơn không ngụ ý sử dụng cú pháp nào mà không cần biết phiên bản ZSH đó là.


0

Để bổ sung cho tất cả các câu trả lời trên, một mẹo thuận tiện khác là đặt cài đặt lời nhắc màu vào một hàm zsh. Ở đó, bạn có thể xác định các biến cục bộ thành các lệnh dài hơn bí danh, ví dụ rc=$reset_colorhoặc xác định các biến màu của riêng bạn. Đừng quên đặt nó vào .zshrctệp của bạn và gọi hàm bạn đã xác định:

# 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.