在 PSReadLine 中使用预测器

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

使用预测 IntelliSense

启用预测 IntelliSense 后,预测建议会显示为用户光标后面的彩色文本。 预测 IntelliSense 提供的建议帮助 PowerShell 的新手和有经验的用户基于匹配预测来发现、编辑和执行完整命令。 建议可能来自用户的历史记录和其他特定于域的插件。

预测的内联视图

前面的图像显示建议的默认值 InlineView 。 按 右箭头 键接受内联建议。 接受建议后,可以先编辑命令行,再按 Enter 运行命令。

PSReadLine 还提供 ListView 建议的演示。

预测列表视图

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

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

管理预测智能代码提示

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

使用 PowerShellGet 安装 PSReadLine

Install-Module -Name PSReadLine

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

Install-PSResource -Name PSReadLine

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

PSReadLine 2.2.6 中,默认情况下,IntelliSense 的预测功能会根据以下条件启用:

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

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

Get-PSReadLineOption | Select-Object -Property PredictionSource

可以使用 Set-PSReadLineOption cmdlet 命令和 PredictionSource 参数更改预测源。 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 时,你将获得正常的选项卡补全体验。 切换到 ListView后,将获得 IntelliSense 体验。 可以从 PowerShell 库安装 CompletionPredictor 模块。

利用 CompletionPredictor 实现 PowerShell IntelliSense

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

创建自己的预测器模块

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

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