Làm thế nào để tô màu cho dấu nhắc Powershell?


17

Tôi luôn luôn nhắc nhở mình là màu này trong linux Sau đó tôi có thể tìm thấy đầu vào của mình trong cửa sổ lệnh đen. Nhưng chúng ta có thể tạo ra màu tương tự trong Powershell của tôi không?


Phông chữ điều khiển là gì?
Dmitry Kudriavtsev

@DmitryKudriavtsev Nhìn này , có thể đó là bài hát Sim bằng tiếng Anh.
yode

Đây có phải là SimSun không?
Dmitry Kudriavtsev

@DmitryKudriavtsev Vâng, xin lỗi tôi đã phạm sai lầm.
yode

không phải lỗi của bạn, phiên âm là khó
Dmitry Kudriavtsev

Câu trả lời:


32

ảnh chụp màn hình của dấu nhắc màu

Lời nhắc của PowerShell

Những gì bạn muốn làm là tùy chỉnh lời nhắc .

Dấu nhắc mặc định trong PowerShell 3.0 và mới hơn là:

function prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}

Trình tự thoát màu

Bây giờ, Windows 10 hỗ trợ các mã thoát ANSI trong conhost của nó, và 24-bit màu được hỗ trợ kể từ năm 1703.

Để sử dụng một trong các mã thoát ANSI, chúng ta cần một ký tự ESC theo nghĩa đen . Đây là số bát phân 033 hoặc số thập phân 27. Trong Bash, bạn sẽ sử dụng "\033"hoặc "\e"; Không có chuỗi tương đương trực tiếp trong PowerShell nhưng thay vào đó bạn có thể nhúng một biểu thức:"$([char]27)"

Trong PowerShell Core, bạn có thể sử dụng "`e"chuỗi thoát thay thế. Nhờ nhận xét của Asherber.


Sử dụng trong PowerShell

Điều này có nghĩa là bạn có thể, ví dụ, sử dụng chuỗi thoát sau đây để đặt màu nền thành màu lục lam với mã 46:

"$([char]27)[46m"

Mà có thể được sử dụng như vậy:

echo "$([char]27)[46mColoured text"

Để làm cho mọi thứ dễ đọc hơn, hãy xác định một biến:

$ESC = [char]27

Vì vậy, chúng ta có thể sử dụng:

"$ESC[46m"

Trường hợp $ESCký tự ESC theo nghĩa đen, [xác định bắt đầu của danh sách param và mkết thúc.

Sử dụng nó trong một lệnh:

echo "$ESC[46mColoured text"

Và để khôi phục cài đặt màu gốc, chúng tôi sử dụng mã 0thay thế:

echo "$ESC[46mColoured text$ESC[0mUncoloured text"

Màu sắc cao cấp hơn

Nếu bạn không hài lòng với bảng màu 16 màu cơ bản, bạn có thể sử dụng đầy đủ các màu 24 bit với biểu mẫu:

"$ESC[48;2;<r>;<g>;<b>m"

Đâu <r>là giá trị thập phân cho màu đỏ từ 0-255, <g>cho màu xanh lá cây và <b>cho màu xanh lam, vd"$ESC[48;2;255;0;123m"

Vui lòng tham khảo tài liệu để biết thêm thông tin.

Trên thực tế, đây là tất cả tương đương trực tiếp với những gì bạn sẽ làm trong bash, ngoại trừ bạn cần sử dụng $ESC(sau khi bạn đã xác định nó) thay vì \ehoặc \033.


Đặt dấu nhắc màu

Đặt các mã này lại với nhau, chúng ta có thể sử dụng mã thoát màu ANSI trong lời nhắc được sửa đổi để thay đổi màu nền:

function prompt  
{  
    $ESC = [char]27
    "$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"  
}

Kiên trì

Nếu bạn muốn điều này tồn tại qua các phiên, hãy thêm nó vào hồ sơ của bạn (như .bashrc). Bạn có thể xem đường dẫn đến hồ sơ của bạn trong $profile.


Xin chào ~, đó là một câu trả lời tuyệt vời..Nhưng hơn nữa, chúng ta có thể làm cho văn bản được in đậm không? Sau đó, chúng ta có thể tìm thấy nó dễ dàng hơn ..
yode

1
@yode Đó là ít nhiều tất cả tài liệu ở đây , mà tôi đã liên kết trong câu trả lời;)
Bob

1
@yode À. Nếu bạn so sánh với 37 màu trắng không sáng, có vẻ như các cửa sổ PowerShell đã sử dụng 97 màu trắng sáng theo mặc định. (btw, sẽ có một bảng màu mới để cài đặt sạch phiên bản Win10 tiếp theo. Có một số ảnh chụp màn hình của bảng màu hiện tại ; lưu ý 1;37mgiống như 97m, cả hai đều có nghĩa là "màu trắng sáng")
Bob

1
@yode Về cơ bản, conhost chưa hỗ trợ in đậm. Màu sáng là một thay thế cho đậm và bạn đã sử dụng màu sáng theo mặc định. Nếu bạn thực sự muốn in đậm, bạn có thể sử dụng một thiết bị đầu cuối thay thế, chẳng hạn như ConEmu - nhưng có vẻ như sự hỗ trợ của họ cho in đậm ANSI cũng không hoàn thành. IMO, nó không đáng để gặp rắc rối.
Bob

1
Tôi không thể làm cho Markdown hoạt động chính xác, nhưng trong PowerShell Core, bạn có thể sử dụng backtick + e cho [char]27. Tôi không chắc chắn nếu điều này đã được thêm vào trong các phiên bản trước.
Asherber
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.