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

3007
yode

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

15
Что такое шрифт консоли? Dmitry Kudriavtsev 6 лет назад 0
@DmitryKudriavtsev Посмотрите [это] (https://i.stack.imgur.com/qmT90.png), возможно, это * Sim song * на английском языке. yode 6 лет назад 0
Это может быть SimSun? Dmitry Kudriavtsev 6 лет назад 0
@DmitryKudriavtsev Да, извините, я ошибаюсь. yode 6 лет назад 0
не твоя вина, транслитерация это сложно Dmitry Kudriavtsev 6 лет назад 0

1 ответ на вопрос

26
Bob

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

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

Это означает, что вы можете, например, использовать следующую 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.

Привет ~, это отличный ответ. Но, кроме того, можем ли мы сделать текст [жирным шрифтом] (https://i.stack.imgur.com/KJWEB.png)? Тогда мы сможем найти его более простым. , yode 6 лет назад 0
@yode Вы можете добавить код `1`, чтобы включить опцию bold / bright, например,` $ ESC [46; 1m`. Однако, похоже, что conhost в настоящее время не поддерживает фактический жирный шрифт - он просто использует яркий цвет переднего плана. Вы можете добавить `4` для подчеркивания, если хотите. Bob 6 лет назад 0
Сумасшедший. Не могли бы вы сказать мне, как вы находите эту информацию? yode 6 лет назад 0
@yode Более или менее все задокументировано [здесь] (https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-septions#span-idtextformattingspanspan-idtextformattingspanspan-idtextformattingspantext-formatting), которое Я связал в ответ;) Bob 6 лет назад 1
Что касается тебя, кажется, что 91 - это то, что я после. Но, похоже, это не работает .. yode 6 лет назад 0
Вместо определения `$ ESC`, почему бы не определить такие вещи, как` $ RED`, `$ BLUE` и` $ OFF`. Я думаю, что это действительно улучшит читабельность. `" Эта фраза $ синего цвета $ и $ эта фраза красного цвета $ . "` Dennis Williamson 6 лет назад 0
@DennisWilliamson Есть достаточно разных случаев, которые, я думаю, становятся громоздкими - как вы различаете синий фон и передний план? И вы можете изменить несколько настроек форматирования в одной команде, например, цвет + подчеркивание. Это имеет больше смысла, если вам это нужно для многих команд, например `$ COLOUR_ERROR`. Но это не очень полезно для быстрой строки. `$ ESC` было сделано, чтобы она могла быть более или менее заменой той же команды в bash (` \ e`). Bob 6 лет назад 0
@yode Как это не работает? Какую команду вы использовали именно? Это не даст вам смелости, но оно должно дать вам ярко-красный цвет переднего плана. Bob 6 лет назад 0
Похоже, получить [тот же результат] (https://i.stack.imgur.com/y2jmZ.png) yode 6 лет назад 0
@yode Ах. Если сравнивать с 37 неяркими белыми, похоже, что в Windows PowerShell уже по умолчанию используется 97 ярких белых. (кстати, будет [новая цветовая палитра] (https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/) для чистой установки следующая версия Win10. Там есть несколько скриншотов [текущей палитры] (https://msdnshared.blob.core.windows.net/media/2017/08/ConsoleChangesSideBySideNoBar1.png); обратите внимание, что `1; 37m` это то же самое как `97m`, оба означают" ярко-белый ") Bob 6 лет назад 1
@yode В основном conhost еще не поддерживает жирный шрифт. Яркий заменитель жирным шрифтом, и вы уже используете яркий цвет по умолчанию. Если вы действительно хотите выделение жирным шрифтом, вы можете использовать альтернативный терминал, такой как [ConEmu] (https://conemu.github.io/en/FaqBoldItalic.html) - но похоже, что поддержка ANSI жирным шрифтом также не завершена , ИМО, это не стоит хлопот. Bob 6 лет назад 1