about_ANSI_Terminals
Краткое описание
Описывает поддержку, доступную для escape-последовательностей ANSI в PowerShell.
Подробное описание
PowerShell имеет множество функций, поддерживающих использование escape-последовательностей ANSI для управления отрисовкой выходных данных в приложении терминала, где размещается PowerShell.
В PowerShell 7.2 добавлена новая автоматическая переменная $PSStyle
и изменения в подсистеме PowerShell для поддержки вывода текста, дополненного ANSI.
Поддержка терминалов ANSI
Функции ANSI предназначены для обеспечения совместимости с терминалами на основе xterm. Дополнительные сведения см. в статье xterm в Википедии.
В Windows 10 и более поздних версий узел консоли Windows совместим с xterm. Приложение Терминал Windows также совместимо с xterm.
В macOS приложение терминала по умолчанию совместимо с xterm.
Для Linux каждый дистрибутив поставляется с другим приложением терминала. Чтобы найти подходящее приложение терминала, обратитесь к документации по дистрибутиву.
$PSStyle
Переменная имеет следующие свойства:
- Сброс — отключает все украшения.
- Мигание — включение мигания
- BlinkOff — выключает мигание
- Полужирный — включение полужирного
- BoldOff — отключение полужирного
- Скрытый — включает скрытые
- HiddenOff — отключение скрытого
- Обратный — включает обратный
- ReverseOff — отключает обратный
- Курсив — курсив
- ItalicOff — отключает курсив
- Подчеркивание — включение подчеркивания
- Подчеркивание— выключает подчеркивание.
- Strikethrough — включение зачеркивной
- StrikethroughOff — отключает забастовку
- OutputRendering — управление отрисовкой выходных данных
- Форматирование — вложенный объект, который управляет форматированием по умолчанию для выходных потоков.
- Progress — вложенный объект, управляющий отображением индикаторов выполнения.
- FileInfo — вложенный объект для управления цветом объектов FileInfo .
- Передний план — вложенный объект для управления цветом переднего плана
- Background — вложенный объект для управления цветом фона
Базовые элементы возвращают строки escape-последовательностей ANSI, сопоставленные с их именами. Значения можно настраивать. Например, можно изменить полужирный на подчеркнутой. Имена свойств упрощают создание декорированных строк с помощью завершения табуляции:
"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"
Следующие элементы управляют тем, как и когда используется форматирование ANSI:
$PSStyle.OutputRendering
— это перечислениеSystem.Management.Automation.OutputRendering
со значениями:ANSI
: escape-последовательности ANSI всегда передаются через "как есть".Важно!
При перенаправлении выходных данных в файл или конвейер, который должен выполняться ниже, следует использовать режим ANSI . Это гарантирует, что выходные данные не будут изменены. При использовании любого другого режима выходные данные изменяются путем удаления escape-последовательностей ANSI, что может изменить поведение выполнения.
PlainText
: escape-последовательности ANSI всегда удаляются, чтобы это был только обычный текст.Host
: Это поведение установлено по умолчанию. Escape-последовательности ANSI удаляются из перенаправленных или конвейерных выходных данных. Дополнительные сведения см. в разделе Перенаправление выходных данных.
Элементы
$PSStyle.Background
и$PSStyle.Foreground
— это строки, содержащие escape-последовательности ANSI для 16 стандартных цветов консоли.Black
BrightBlack
White
BrightWhite
Red
BrightRed
Magenta
BrightMagenta
Blue
BrightBlue
Cyan
BrightCyan
Green
BrightGreen
Yellow
BrightYellow
Значения можно задать и могут содержать любое количество escape-последовательностей ANSI. Существует также
FromRgb()
метод для указания 24-разрядного цвета. Существует два способа вызоваFromRgb()
метода.string FromRgb(byte red, byte green, byte blue) string FromRgb(int rgb)
В любом из следующих примеров задается цвет фона 24-разрядным цветом
Beige
.$PSStyle.Background.FromRgb(245, 245, 220) $PSStyle.Background.FromRgb(0xf5f5dc)
$PSStyle.Formatting
— это вложенный объект для управления форматированием по умолчанию для сообщений отладки, ошибок, подробных сообщений, предупреждений, а также заголовков списков и таблиц. Вы также можете управлять такими атрибутами, как выделение полужирным шрифтом и подчеркивание. Он заменяет$Host.PrivateData
в качестве способа управления цветами для форматирования отрисовки.$Host.PrivateData
продолжает существовать для обратной совместимости, но не подключен к$PSStyle.Formatting
.$PSStyle.Formatting
имеет следующие элементы:- FormatAccent — форматирование элементов списка
- TableHeader — форматирование заголовков таблиц
- ErrorAccent — форматирование метаданных ошибки
- Ошибка — форматирование сообщений об ошибках
- Предупреждение — форматирование предупреждающих сообщений
- Подробное форматирование для подробных сообщений
- Отладка — форматирование сообщений отладки
$PSStyle.Progress
позволяет управлять отображением индикатора хода выполнения.- Style — строка ANSI, задающая стиль отрисовки.
- MaxWidth — задает максимальную ширину представления. По умолчанию —
120
. Минимальное значение — 18. - View — перечисление со значениями и
Minimal
Classic
.Classic
— существующий рендеринг без изменений.Minimal
— минимальный рендеринг одной строки. Значение по умолчанию —Minimal
. - UseOSCIndicator — по умолчанию —
$false
. Задайте значение$true
для терминалов, поддерживающих индикаторы OSC.
Примечание
Если узел не поддерживает виртуальный терминал, для
$PSStyle.Progress.View
автоматически устанавливается значениеClassic
.В следующем примере для стиля отрисовки задается минимальный индикатор выполнения.
$PSStyle.Progress.View = 'Minimal'
$PSStyle.FileInfo
— это вложенный объект для управления цветом объектов FileInfo .- Каталог — встроенный элемент для указания цвета каталогов
- SymbolicLink — встроенный элемент для указания цвета для символьных ссылок
- Исполняемый файл — встроенный элемент для указания цвета исполняемых файлов.
- Расширение — используйте этот элемент для определения цветов для разных расширений файлов. Элемент Расширения изначально включает расширения для файлов архива и PowerShell.
Командлеты, создающие выходные данные ANSI
- Командлеты Markdown — командлет Show-Markdown отображает содержимое файла, содержащего текст Markdown. Выходные данные отображаются с помощью последовательностей ANSI для представления различных стилей. Определениями стилей можно управлять с помощью командлетов Get-MarkdownOption и Set-MarkdownOption .
- Командлеты PSReadLine— модуль PSReadLine использует последовательности ANSI для цветом элементов синтаксиса PowerShell в командной строке. Цветами можно управлять с помощью командлетов Get-PSReadLineOption и Set-PSReadLineOption.
Get-Error
— командлет Get-Error возвращает подробное представление объекта Error , отформатированное для упрощения чтения.Select-String
— Начиная с PowerShell 7.0 , Select-String использует последовательности ANSI для выделения соответствующих шаблонов в выходных данных.Write-Progress
— Управление выходными данными ANSI осуществляется с помощью$PSStyle.Progress
, как описано выше. Дополнительные сведения см. в разделе О ходе записи.
Перенаправление выходных данных в Host
режиме
По умолчанию $PSStyle.OutputRendering
имеет значение Узел. Escape-последовательности ANSI удаляются из перенаправленных или конвейерных выходных данных.
OutputRendering применяется только к отрисовке в узле, Out-File
и Out-String
. Выходные данные собственных исполняемых файлов не затрагиваются.
PowerShell 7.2.6 изменил поведение Out-File
и Out-String
для следующих сценариев:
- Если входной объект является чистой строкой, эти командлеты сохраняют строку без изменений независимо от параметра OutputRendering .
- Если к входному объекту необходимо применить представление форматирования, эти командлеты сохраняют или удаляют escape-последовательности из выходных строк форматирования на основе параметра OutputRendering .
Это критическое изменение в этих командлетах по сравнению с PowerShell 7.2.
OutputRendering не применяется к выходным данным хост-процесса PowerShell, например при запуске pwsh
из командной строки и перенаправлении выходных данных.
В следующем примере PowerShell запускается в Linux из bash
. Командлет Get-ChildItem
создает текст с оформлением ANSI. Так как перенаправление происходит в bash
процессе, за пределами узла PowerShell выходные данные не затрагиваются OutputRendering.
pwsh -noprofile -command 'Get-Childitem' > out.txt
При проверке содержимого out.txt
вы увидите escape-последовательности ANSI.
В отличие от этого, когда перенаправление происходит в сеансе PowerShell, OutputRendering влияет на перенаправленные выходные данные.
pwsh -noprofile -command 'Get-Childitem > out.txt'
При проверке содержимого out.txt
не существует escape-последовательностей ANSI.
Отключение выходных данных ANSI
Поддержку escape-последовательностей ANSI можно отключить с помощью переменных среды TERM или NO_COLOR.
Следующие значения $env:TERM
изменяют поведение следующим образом:
dumb
-Задает$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Задает$PSStyle.OutputRendering = PlainText
xtermm
-Задает$PSStyle.OutputRendering = PlainText
Если $env:NO_COLOR
существует, то $PSStyle.OutputRendering
параметру присваивается значение PlainText. Дополнительные сведения о переменной среды NO_COLOR см. в разделе https://no-color.org/.
Использование $PSStyle
из C#
Разработчики C# могут получить доступ PSStyle
как к одноэлементным, как показано в следующем примере:
string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";
PSStyle
существует в пространстве имен System.Management.Automation.
Подсистема PowerShell включает следующие изменения:
- Система форматирования PowerShell обновляется в соответствии с
$PSStyle.OutputRendering
. - Тип
StringDecorated
добавляется для обработки экранированных строк ANSI. - Было
string IsDecorated
добавлено логическое свойство , возвращающее значение true , если строка содержитESC
последовательности символов илиC1 CSI
. - Свойство
Length
строки возвращает длину текста без escape-последовательностей ANSI. - Метод
StringDecorated Substring(int contentLength)
возвращает подстроку, начиная с индекса 0 до длины содержимого, которая не является частью escape-последовательностей ANSI. Это необходимо для усечения строк и сохранения escape-последовательностей ANSI, которые не занимают место печатаемых символов, при форматировании таблицы. - Метод
string ToString()
остается неизменным и возвращает версию строки в виде открытого текста. - Метод
string ToString(bool Ansi)
возвращает необработанную внедренную строку ANSI,Ansi
если параметр имеет значение true. В противном случае возвращается версия с открытым текстом с удаленными escape-последовательностями ANSI. - Метод
FormatHyperlink(string text, uri link)
возвращает строку, содержащую escape-последовательности ANSI, используемые для оформления гиперссылок. Некоторые узлы терминала, например Терминал Windows, поддерживают такую разметку, которая позволяет щелкать отображаемый в терминале текст.