วิธีการทำให้พรอมต์ PowerShell colorize?


17

ฉันมักจะแจ้งให้เป็นสีนี้ใน linux ของฉัน จากนั้นฉันสามารถค้นหาอินพุตของฉันในหน้าต่างคำสั่งสีดำ แต่เราสามารถสร้างสีเดียวกันในPowershellของฉันได้ไหม


แบบอักษรของคอนโซลคืออะไร
Dmitry Kudriavtsev

@DmitryKudriavtsev ดูนี้บางทีมันอาจจะเป็นซิมเพลงในภาษาอังกฤษ
yode

นี่คือ SimSun หรือเปล่า
Dmitry Kudriavtsev

@DmitryKudriavtsev ใช่ขอโทษฉันทำผิดพลาด
yode

ไม่ใช่ความผิดของคุณการถอดเสียงเป็นเรื่องยาก
Dmitry Kudriavtsev

คำตอบ:


32

สกรีนช็อตของพรอมต์สี

พร้อมท์ PowerShell

สิ่งที่คุณต้องการจะทำคือการปรับแต่งพรอมต์

พรอมต์เริ่มต้นใน PowerShell 3.0 และใหม่กว่าคือ:

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

ลำดับหนีสี

ตอนนี้, Windows 10 สนับสนุนรหัสหนี ANSIใน conhost และสี 24 บิตได้รับการสนับสนุนตั้งแต่ 1703

จะใช้หนึ่งของรหัสหนี ANSI เราต้องมีตัวอักษรตัวอักษร ESC นี่คือฐานแปด 033 หรือทศนิยม 27 ใน Bash คุณจะใช้"\033"หรือ"\e"; ไม่มีลำดับที่เทียบเท่าโดยตรงใน PowerShell แต่คุณสามารถฝังนิพจน์แทนได้:"$([char]27)"

ใน PowerShell Core คุณสามารถใช้"`e"escape sequence แทน ขอบคุณที่แสดงความคิดเห็นโดย asherber


ใช้ใน PowerShell

ซึ่งหมายความว่าคุณสามารถใช้ลำดับการหลีกเลี่ยงต่อไปนี้เพื่อตั้งค่าสีพื้นหลังเป็นสีฟ้าด้วยรหัส46:

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

ซึ่งสามารถใช้เช่น:

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

เพื่อให้สิ่งที่อ่านง่ายขึ้นให้กำหนดตัวแปร:

$ESC = [char]27

ดังนั้นเราสามารถใช้:

"$ESC[46m"

$ESCตัวอักษร ESC อยู่ตรงไหน[กำหนดจุดเริ่มต้นของรายการพารามิเตอร์และmจุดสิ้นสุด

ใช้ในคำสั่ง:

echo "$ESC[46mColoured text"

และเพื่อเรียกคืนการตั้งค่าสีดั้งเดิมเราใช้รหัส0แทน:

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

สีขั้นสูงเพิ่มเติม

หากคุณไม่พอใจกับจานสีแบบพื้นฐาน 16 สีคุณสามารถใช้สี 24 บิตแบบเต็มกับแบบฟอร์ม:

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

ที่ไหน<r>เป็นค่าทศนิยมสำหรับสีแดง 0-255, <g>สีเขียวและ<b>สีน้ำเงินเช่น"$ESC[48;2;255;0;123m"

โปรดดูเอกสารประกอบสำหรับข้อมูลเพิ่มเติม

ในความเป็นจริงนี่คือทั้งหมดที่เทียบเท่าโดยตรงกับสิ่งที่คุณจะทำในทุบตียกเว้นคุณจำเป็นต้องใช้$ESC(หลังจากที่คุณได้กำหนดไว้มัน) แทนหรือ\e\033


การตั้งค่าพรอมต์สี

เมื่อนำสิ่งเหล่านี้มารวมกันเราสามารถใช้รหัสยกเว้นสีของ ANSI ในพรอมต์ที่แก้ไขเพื่อเปลี่ยนสีพื้นหลัง:

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

วิริยะ

หากคุณต้องการให้สิ่งนี้ยังคงมีอยู่ในเซสชันให้เพิ่มลงในโปรไฟล์ของคุณ (เช่น.bashrc) คุณสามารถดูเส้นทางไปยังโปรไฟล์ของคุณ$profileได้


สวัสดี ~ มันเป็นคำตอบที่ยอดเยี่ยม .. แต่ยิ่งไปกว่านั้นเราสามารถทำให้ข้อความเป็นสไตล์ที่เป็นตัวหนาได้หรือไม่จากนั้นเราสามารถค้นหาได้ง่ายขึ้น ..
yode

1
@yode เอกสารทั้งหมดที่นี่มากขึ้นหรือน้อยลงซึ่งฉันเชื่อมโยงกับคำตอบ;)
Bob

1
@yode Ah หากคุณเปรียบเทียบกับ 37 สีขาวที่ไม่ใช่สว่างดูเหมือนว่าหน้าต่าง PowerShell ใช้ 97 สีขาวสว่างเป็นค่าเริ่มต้น (btw จะมีชุดสีแบบใหม่สำหรับการติดตั้งรุ่นถัดไปที่สะอาดหมดจดของ Win10 รุ่นต่อไปมีภาพหน้าจอบางส่วนที่มีชุดสีปัจจุบันโปรดทราบว่า1;37mเหมือนกัน97mทั้งสองมีความหมายว่า "สีขาวสดใส")
Bob

1
@yode โดยทั่วไป conhost ยังไม่สนับสนุนตัวหนา ความสว่างเป็นสิ่งทดแทนตัวหนาและคุณใช้สีสดใสเป็นค่าเริ่มต้น หากคุณต้องการตัวหนาจริงๆคุณสามารถใช้เทอร์มินัลสำรองเช่นConEmu - แต่ดูเหมือนว่าการรองรับ ANSI ตัวหนาของพวกเขาจะไม่เสร็จสมบูรณ์เช่นกัน IMO มันไม่คุ้มค่ากับปัญหา
บ๊อบ

1
ฉันไม่สามารถได้รับ Markdown ในการทำงานได้อย่างถูกต้อง แต่ใน PowerShell หลักคุณสามารถใช้ backtick + E [char]27สำหรับ ฉันไม่แน่ใจว่าสิ่งนี้ถูกเพิ่มเข้ามาในเวอร์ชั่นก่อนหน้านี้หรือไม่
asherber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.