Поделиться через


Использование средств прогнозирования в PSReadLine

В PSReadLine 2.1.0 была представлена возможность прогнозного IntelliSense. Прогнозный IntelliSense предлагает варианты полных команд на основе элементов из журнала PSReadLine. В PSReadLine 2.2.2 улучшены возможности прогнозного IntelliSense за счет поддержки подключаемых модулей, которые используют расширенную логику для предложения полных команд. В последней версии PSReadLine 2.2.6 прогнозирование включено по умолчанию.

Использование прогнозного IntelliSense

При включенном прогнозном IntelliSense прогнозируемое предложение появляется в виде цветного текста после курсора пользователя. Предложения прогнозного IntelliSense помогают новым и опытным пользователям PowerShell выявлять, изменять и выполнять полные команды на основе соответствующих прогнозов. Предложения могут поступать из пользовательского журнала или дополнительных подключаемых модулей для конкретных доменов.

Представление прогноза в строке кода

На предыдущем изображении показано представление предложения InlineView по умолчанию. Нажмите клавишу СТРЕЛКА ВПРАВО, чтобы принять предложение в строке. Приняв предложение, вы можете изменить командную строку, прежде чем нажать клавишу ВВОД и выполнить команду.

PSReadLine также предлагает представление предложений ListView.

Представление прогнозов в виде списка

В представлении списка перемещаться между доступными предложениями можно с помощью клавиш со стрелками. В представлении списка также указывается источник прогноза.

По умолчанию в PSReadLine задано представление InlineView. Переключиться между InlineView и ListView можно с помощью клавиши F2. Также для изменения представления можно воспользоваться параметром PredictionViewStyle командлета Set-PSReadLineOption.

Управление прогнозным IntelliSense

Чтобы использовать прогнозный IntelliSense, необходимо установить одну из новых версий PSReadLine. Для наилучших результатов установите последнюю версию модуля.

Чтобы установить PSReadLine с помощью PowerShellGet, воспользуйтесь следующей командой:

Install-Module -Name PSReadLine

Или выполните установку с помощью нового модуля PowerShellGet версии 3:

Install-PSResource -Name PSReadLine

PSReadLine можно установить в Windows PowerShell 5.1 или в PowerShell 7 или более поздней версии. Чтобы использовать подключаемые модули прогнозирования, у вас должна быть установлена среда PowerShell 7.2 или более поздней версии. Windows PowerShell 5.1 может использовать прогнозатор на основе журнала.

В PSReadLine 2.2.6 прогнозный IntelliSense включен по умолчанию в зависимости от следующих условий:

  • Если поддерживается виртуальный терминал, а PSReadLine выполняется в PowerShell 7.2 или более поздней версии, PredictionSource принимает значение HistoryAndPlugin.
  • Если поддерживается виртуальный терминал, а PSReadLine выполняется в PowerShell версии ниже 7.2, PredictionSource принимает значение History.
  • Если виртуальный терминал не поддерживается, PredictionSource принимает значение None.

Текущее значение параметра можно просмотреть с помощью следующей команды:

Get-PSReadLineOption | Select-Object -Property PredictionSource

Источник прогнозирования можно изменить с помощью параметра PredictionSource командлета Set-PSReadLineOption. Параметр PredictionSource может принимать следующие значения:

  • None
  • History
  • Plugin
  • HistoryAndPlugin

Примечание.

Прогнозы на основе журнала составляются с помощью журнала, который поддерживается PSReadLine. Эта история является более полной, чем журнал на основе сеансов, который можно просмотреть с помощью Get-History. Дополнительные сведения см. в разделе Журнал команд статьи Сведения о PSReadLine.

Выбор цвета прогнозов

По умолчанию прогнозы отображаются в виде светло-серого текста на строке, в которой печатает пользователь. Чтобы обеспечить поддержку специальных возможностей, можно настроить цвет прогнозов. Цвета определяются с помощью escape-последовательностей ANSI. Чтобы составить escape-последовательности ANSI, можно использовать переменную $PSStyle.

Set-PSReadLineOption -Colors @{ InlinePrediction = $PSStyle.Background.Blue }

Также можно создать собственную переменную. Чтобы восстановить светло-серый цвет текста прогнозов по умолчанию, воспользуйтесь следующей escape-последовательностью ANSI:

Set-PSReadLineOption -Colors @{ InlinePrediction = "`e[38;5;238m" }

Дополнительные сведения об изменении цвета прогнозов и других параметров PSReadLine см. в статье Set-PSReadLineOption.

Изменение настраиваемых сочетаний клавиш

В PSReadLine содержатся функции для перемещения по прогнозам и их выбора. Например:

  • AcceptSuggestion — принимает текущее предложение в строке
  • AcceptNextSuggestionWord — принимает следующее слово предложения в строке
  • AcceptSuggestion построен внутри ForwardChar, который привязан к RightArrow по умолчанию
  • AcceptNextSuggestionWord встроена в функцию ForwardWord, которую можно привязать к клавишам CTRL+F

Чтобы изменить настраиваемые сочетания клавиш, можно воспользоваться командлетом Set-PSReadLineKeyHandler.

Set-PSReadLineKeyHandler -Chord "Ctrl+f" -Function ForwardWord

С этой привязкой при нажатии клавиш CTRL+F принимается следующее слово предложения в строке, если курсор находится в конце текущей строки редактирования. Можно создать привязки к другим клавишам для AcceptSuggestion и AcceptNextSuggestionWord с теми же возможностями. Например, вы можете сделать RightArrow принять следующее слово встроенного предложения вместо всей строки предложения.

Set-PSReadLineKeyHandler -Chord "RightArrow" -Function ForwardWord

Использование других подключаемых модулей прогнозирования

Первым подключаемым модулем для прогнозного IntelliSense стал модуль Az.Tools.Predictor. В нем используется машинное обучение для прогнозирования команды Azure PowerShell, которую необходимо выполнить, и используемых с ней параметров. Дополнительные сведения и инструкции по установке см. в записи блога Представляем версию Az.Tools.Predictor общей доступности.

Модуль CompletionPredictor добавляет интерфейс IntelliSense ко всем элементам, в которых используется завершение по клавише TAB в PowerShell. Если для PSReadLine задано представление InlineView, вы увидите обычный интерфейс завершения по клавише TAB. При переключении на ListView вы увидите интерфейс IntelliSense. Модуль CompletionPredictor можно установить из коллекции PowerShell.

PowerShell IntelliSense с использованием CompletionPredictor

Как было отмечено ранее, в представлении ListView отображается источник прогноза. Если установлено несколько подключаемых модулей, прогнозы группируются по источнику, первым из которых следует Журнал, а затем — подключаемые модули в порядке загрузки.

Создание собственного модуля прогнозирования

С помощью C# можно создать собственный скомпилированный модуль прогнозирования PowerShell. В модуле должен быть реализован интерфейс System.Management.Automation.Subsystem.Prediction.ICommandPredictor. Этот интерфейс объявляет методы, используемые для запроса результатов прогнозирования и для предоставления обратной связи.

Дополнительные сведения см. в статье Создание средства прогнозирования командной строки.