Как раскрасить подсказку Powershell?

17

Я всегда подсказываю, чтобы этот цвет был в моем Linux. Тогда я могу найти свой ввод в черном командном окне. Но можем ли мы сделать такой же цвет в моем Powershell ?

yode
источник
Что такое шрифт консоли?
Дмитрий Кудрявцев
@DmitryKudriavtsev Посмотрите это , может быть , это Сим песня на английском языке.
yode
Это может быть SimSun?
Дмитрий Кудрявцев
@DmitryKudriavtsev Да, извините, я ошибаюсь.
yode
не твоя вина, транслитерация сложная
Дмитрий Кудрявцев

Ответы:

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-последовательность. Благодаря комментарию asherber.


Использовать в PowerShell

Это означает, что вы можете, например, использовать следующую escape-последовательность для установки цвета фона на голубой с кодом 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"

Пожалуйста, обратитесь к документации для получения дополнительной информации.

Фактически, все это прямо эквивалентно тому, что вы делаете в bash, за исключением того, что вам нужно использовать $ESC(после того, как вы это определили) вместо \eили \033.


Установка цветной подсказки

Собрав их вместе, мы можем использовать escape-коды цвета ANSI в измененном приглашении, чтобы изменить цвет фона:

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

Упорство

Если вы хотите, чтобы это сохранялось между сеансами, добавьте его в свой профиль (например .bashrc). Вы можете просмотреть путь к вашему профилю в $profile.

боб
источник
Привет ~, это отличный ответ .. Но, кроме того, мы могли бы сделать текст жирным шрифтом ? Тогда мы можем найти его более легким ..
йод
1
@yode Это более или менее все документировано здесь , что я связан в ответ;)
Боб
1
@yode Ах. Если сравнивать с 37 неяркими белыми, похоже, что окна PowerShell уже используют 97 ярких белых по умолчанию. (кстати, будет новая цветовая палитра для чистых установок следующей версии Win10. Там есть некоторые скриншоты текущей палитры ; обратите внимание, что 1;37mэто то же самое 97m, что означает «ярко-белый»)
Боб
1
@yode В основном conhost еще не поддерживает жирный шрифт. Яркий заменитель жирным шрифтом, и вы уже используете яркий цвет по умолчанию. Если вам действительно нужен жирный шрифт, вы можете использовать альтернативный терминал, такой как ConEmu, но похоже, что их поддержка ANSI жирного шрифта также не завершена. ИМО, это не стоит проблем.
Боб
1
Я не могу заставить Markdown работать правильно, но в PowerShell Core вы можете использовать backtick + e для [char]27. Я не уверен, было ли это добавлено в более ранних версиях.
Ашербер