在 PSReadLine 中使用预测器

PSReadLine 2.1.0 引入了预测性 IntelliSense 功能。 预测性 IntelliSense 根据 PSReadLine 历史记录中的项提供针对完整命令的建议。 PSReadLine 2.2.2 通过添加对使用高级逻辑的插件模块的支持来扩展预测性 IntelliSense 的功能,从而提供针对完整命令的建议。 最新版本的 PSReadLine 2.2.6 默认启用预测。

使用预测性 IntelliSense

启用预测性 IntelliSense 后,预测建议以彩色文本形式显示在用户光标之后。 预测性 IntelliSense 提供的建议可帮助 PowerShell 的新老用户根据匹配预测发现、编辑和执行完整命令。 建议可能来自用户的历史记录和其他特定于域的插件。

预测的内联视图

上图显示建议的默认 InlineView。 按 RightArrow 键接受内联建议。 接受建议后,可以先编辑命令行,再按 Enter 运行命令。

PSReadLine 还提供 ListView 建议的演示。

预测的列表视图

在列表视图中,可以使用箭头键滚动浏览可用建议。 列表视图还显示预测源。

PSReadLine 默认为 InlineView。 可通过按 F2 键在 InlineViewListView 之间进行切换。 还可以使用 Set-PSReadLineOption 的 PredictionViewStyle 参数来更改视图。

管理预测性 IntelliSense

若要使用预测性 IntelliSense,必须安装较新版本的 PSReadLine。 为获得最佳效果,请安装该模块的最新版本。

使用 PowerShellGet 安装 PSReadLine:

Install-Module -Name PSReadLine

或者使用新的 PowerShellGet v3 模块进行安装:

Install-PSResource -Name PSReadLine

可在 Windows PowerShell 5.1 或 PowerShell 7 或更高版本中安装 PSReadLine。 若要使用预测器插件,必须在 PowerShell 7.2 或更高版本中运行。 Windows PowerShell 5.1 可以使用基于历史记录的预测器。

在 PSReadLine 2.2.6 中,默认情况下会启用预测性 IntelliSense,具体取决于以下条件:

  • 如果支持虚拟终端 (VT),并且 PSReadLine 在 PowerShell 7.2 或更高版本中运行,则 PredictionSource 设置为 HistoryAndPlugin
  • 如果支持 VT,并且 PSReadLine 在低于 7.2 版本的 PowerShell 中运行,则 PredictionSource 设置为 History
  • 如果不支持 VT,则 PredictionSource 设置为 None

使用以下命令查看当前设置:

Get-PSReadLineOption | Select-Object -Property PredictionSource

可以使用带有 PredictionSource 参数的 Set-PSReadLineOption cmdlet 更改预测源。 可将 PredictionSource 设置为:

  • None
  • History
  • Plugin
  • HistoryAndPlugin

备注

基于历史记录的预测来自由 PSReadLine 维护的历史记录。 相比于可使用 Get-History 查看的基于会话的历史记录,该历史记录更全面。 有关详细信息,请参阅 about_PSReadLine 的“命令历史记录”部分。

设置预测颜色

默认情况下,预测以浅灰色文本形式显示在用户正在输入的同一行。 为了满足可访问性需求,你可以自定义预测颜色。 颜色是使用 ANSI 转义序列定义的。 可使用 $PSStyle 撰写 ANSI 转义序列。

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

或者,你可以创建自己的转义序列。 可以使用以下 ANSI 转义序列恢复默认浅灰色预测文本颜色。

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

有关设置预测颜色和其他 PSReadLine 设置的详细信息,请参阅 Set-PSReadLineOption

更改键绑定

PSReadLine 包含用于导航和接受预测的函数。 例如:

  • AcceptSuggestion - 接受当前的内联建议
  • AcceptNextSuggestionWord - 接受内联建议的下一个词
  • AcceptSuggestion 内置于 ForwardChar 中,默认绑定到 RightArrow
  • AcceptNextSuggestionWord 内置于 ForwardWord 函数,可绑定到 Ctrl+f

可以使用 Set-PSReadLineKeyHandler cmdlet 更改键绑定。

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

使用此绑定时,按 Ctrl+f 会在光标位于当前编辑行末尾时接受内联建议的下一个词。 你可以将其他键绑定到 AcceptSuggestionAcceptNextSuggestionWord 以使用类似功能。 例如,你可能希望使 RightArrow 接受内联建议的下一个词,而不是整个建议行。

Set-PSReadLineKeyHandler -Chord "RightArrow" -Function ForwardWord

使用其他预测器插件

Az.Tools.Predictor 模块是预测性 IntelliSense 的第一个插件。 它使用机器学习来预测你想要运行的 Azure PowerShell 命令以及想要使用的参数。 有关详细信息和安装说明,请参阅宣布正式发布 Az.Tools.Predictor

CompletionPredictor 模块为 PowerShell 中可通过 Tab 自动补全的任何内容添加 IntelliSense 体验。 将 PSReadLine 设置为 InlineView 后,可获得普通的 Tab 自动补全体验。 切换到 ListView 后,可获得 IntelliSense 体验。 可以从 PowerShell 库安装 CompletionPredictor 模块。

使用 CompletionPredictor 的 PowerShell IntelliSense

如前所述,ListView 会显示预测源。 如果安装了多个插件,则预测会按源进行分组,其中首先列出历史记录,随后按加载顺序列出每个插件。

创建你自己的预测器模块

可以使用 C# 编写你自己的预测器来创建已编译的 PowerShell 模块。 该模块必须实现 System.Management.Automation.Subsystem.Prediction.ICommandPredictor 接口。 此接口声明用于查询预测结果和提供反馈的方法。

有关详细信息,请参阅如何创建命令行预测器