about_PSReadLine_Functions

简短说明

PSReadLine 在 PowerShell 控制台中提供了改进的命令行编辑体验。

长说明

PowerShell 7.3 附带 PSReadLine 2.2.6。 当前版本为 PSReadLine 2.3.4。 可以在 Windows PowerShell 5.1 及更新版本上安装和使用 PSReadLine 的当前版本。 对于某些功能,需要运行 PowerShell 7.2 或更高版本。

本文介绍 PSReadLine 2.3.4 提供的函数。 这些函数可以绑定到击键,以便轻松访问和调用。

使用 Microsoft.PowerShell.PSConsoleReadLine 类

Microsoft.PowerShell.PSConsoleReadLine中提供了以下函数。

基本编辑函数

流产

中止当前操作,例如:增量历史记录搜索。

  • Emacs 模式:Ctrl+g
  • Vi 插入模式:Ctrl+g
  • Vi 命令模式:<Ctrl+g>

接受并GetNext

尝试执行当前输入。 如果它可以执行(如 AcceptLine),则在下次调用 ReadLine 时从历史记录中召回下一个项目。

  • Emacs 模式:Ctrl+o

接受线

尝试执行当前输入。 如果当前输入不完整(例如缺少右括号、括号或引号),则延续提示将显示在下一行,PSReadLine 等待键编辑当前输入。

  • Windows 模式:Enter
  • Emacs 模式:Enter
  • Vi 插入模式:Enter

AddLine (添加线路)

延续提示显示在下一行上,PSReadLine 等待键编辑当前输入。 这可用于将多行输入作为单个命令输入,即使单行本身完成输入也是如此。

  • Windows 模式:Shift+Enter
  • Emacs 模式:Shift+Enter
  • Vi 插入模式:Shift+Enter
  • Vi 命令模式:<Shift+Enter>

BackwardDeleteChar

删除光标前的字符。

  • Windows 模式:BackspaceCtrl+h
  • Emacs 模式:BackspaceCtrl+BackspaceCtrl+h
  • Vi 插入模式:Backspace
  • Vi 命令模式:<X><d,h>

向后删除输入

与 BackwardKillInput 一样 - 从点到输入的开头删除文本,但不会将已删除的文本置于杀伤环中。

  • Windows 模式:Ctrl+Home
  • Vi 插入模式:Ctrl+uCtrl+Home
  • Vi 命令模式:<Ctrl+u><Ctrl+Home>

向后删除线

与 BackwardKillLine 一样 - 从点到行的开头删除文本,但不会将已删除的文本置于终止圈中。

  • Vi 命令模式:<d,0>

向后删除单词

删除上一个单词。

  • Vi 命令模式:<Ctrl+w><d,b>

向后杀戮输入

清除从输入开始到光标的文本。 清除的文本放置在杀伤圈中。

  • Emacs 模式:Ctrl+uCtrl+x,Backspace

向后杀戮线

清除从当前逻辑行开头到光标的文本。 清除的文本放置在杀伤圈中。

  • 函数未绑定。

向后杀字

从当前单词的开头清除到光标的输入。 如果光标位于单词之间,则从上一个单词的开头清除输入到游标。 清除的文本放置在杀伤圈中。

  • Windows 模式:Ctrl+BackspaceCtrl+w
  • Emacs 模式:Alt+BackspaceEscape,Backspace
  • Vi 插入模式:Ctrl+Backspace
  • Vi 命令模式:<Ctrl+Backspace>

向后替换字符

替换光标前面的字符。

  • Vi 命令模式:<c,h>

CancelLine (取消线)

取消当前输入,在屏幕上留下输入,但返回到主机,以便再次评估提示。

  • Vi 插入模式:Ctrl+c
  • Vi 命令模式:<Ctrl+c>

大写单词

在 PSReadLine 2.3.0 中添加

将下一个单词的第一个字符转换为大写,其余字符转换为小写。

  • Emacs 模式:Alt+cEscape,c

复制

将所选区域复制到系统剪贴板。 如果未选择任何区域,请复制整行。

  • Windows 模式:Ctrl+C

CopyOrCancelLine (复制或取消线)

如果选择文本,请复制到剪贴板,否则取消该行。

  • Windows 模式:Ctrl+c
  • Emacs 模式:Ctrl+c

删除在系统剪贴板中放置已删除文本的选定区域。

  • Windows 模式:Ctrl+x

删除字符

删除光标下的字符。

  • Windows 模式:Delete
  • Emacs 模式:Delete
  • Vi 插入模式:Delete
  • Vi 命令模式:<Delete><x><d,l><d,Spacebar>

DeleteCharOrExit

删除光标下的字符,或者如果该行为空,请退出进程。

  • Emacs 模式:Ctrl+d

DeleteEndOfBuffer

删除到多行缓冲区的末尾。

  • Vi 命令模式:<d,G>

删除Word结束

删除到单词末尾。

  • Vi 命令模式:<d,e>

删除线

删除多行缓冲区的当前逻辑行,启用撤消。

  • Vi 命令模式:<d,d><d,_>

DeleteLineToFirstChar

从多行缓冲区中当前逻辑行的第一个非空白字符中删除。

  • Vi 命令模式:<d,^>

删除下一行

删除多行缓冲区中的当前和下一 n 个逻辑行。

  • Vi 命令模式:<d,j>

删除上一行

删除上一个请求的逻辑行和多行缓冲区中的当前逻辑行。

  • Vi 命令模式:<d,k>

删除 RelativeLines

从缓冲区的开头删除到多行缓冲区中的当前逻辑行。

与大多数 Vi 命令一样,<d,g,g> 命令可以前面加上一个指定绝对行号的数值参数,该参数与当前行号一起构成要删除的行范围。 如果未指定,则数值参数默认为 1,该参数引用多行缓冲区中的第一个逻辑行。

要从多行中删除的实际行数计算为当前逻辑行号与指定数值参数之间的差异,因此可以是负数。 因此,方法名称 相对 部分。

  • Vi 命令模式:<d,g,g>

删除到结束

删除到行尾。

  • Vi 命令模式:<D><d,$>

删除单词

删除下一个单词。

  • Vi 命令模式:<d,w>

Downcase单词

在 PSReadLine 2.3.0 中添加

将下一个单词转换为小写。

  • Emacs 模式:Alt+lEscape,l

ForwardDeleteInput (转发删除输入)

与 KillLine 一样 - 从输入的点到末尾删除文本,但不会将已删除的文本置于终止圈中。

  • Windows 模式:Ctrl+End
  • Vi 插入模式:Ctrl+End
  • Vi 命令模式:<Ctrl+End>

转发删除线

从当前逻辑行的点到末尾删除文本,但不会将已删除的文本置于终止圈中。

  • 函数未绑定

InsertLineAbove

无论光标位于当前行上的位置,都会在当前行上方创建新的空行。 光标移动到新行的开头。

  • Windows 模式:Ctrl+Enter

InsertLineBelow

无论光标位于当前行上的位置,都会在当前行下方创建新的空行。 光标移动到新行的开头。

  • Windows 模式:Shift+Ctrl+Enter

倒置大小写

反转当前字符的情况,并移动到下一个字符。

  • Vi 命令模式:<~>

杀戮线

清除从光标到输入末尾的输入。 清除的文本放置在杀伤圈中。

  • Emacs 模式:Ctrl+k

KillRegion (杀戮区域)

终止光标和标记之间的文本。

  • 函数未绑定。

杀戮词

清除从光标到当前单词末尾的输入。 如果光标位于单词之间,则输入将从光标清除到下一个单词的末尾。 清除的文本放置在杀伤圈中。

  • Windows 模式:Alt+dCtrl+Delete
  • Emacs 模式:Alt+dEscape,d
  • Vi 插入模式:Ctrl+Delete
  • Vi 命令模式:<Ctrl+Delete>

粘贴系统剪贴板中的文本。

  • Windows 模式:Ctrl+vShift+Insert
  • Vi 插入模式:Ctrl+v
  • Vi 命令模式:<Ctrl+v>

重要

使用 粘贴 函数时,剪贴板缓冲区的全部内容将粘贴到 PSReadLine 的输入缓冲区中。 然后,输入缓冲区将传递给 PowerShell 分析器。 使用控制台应用程序的 右键单击 粘贴方法粘贴的输入一次复制到输入缓冲区一个字符。 复制换行符时,输入缓冲区将传递给分析器。 因此,输入一次分析一行。 粘贴方法之间的差异会导致不同的执行行为。

PasteAfter (粘贴后)

将剪贴板粘贴到光标后,将光标移动到粘贴文本的末尾。

  • Vi 命令模式:<p>

PasteBefore (粘贴前)

将剪贴板粘贴到光标之前,将光标移动到粘贴文本的末尾。

  • Vi 命令模式:<P>

PrependAndAccept

前面添加一个“#”并接受该行。

  • Vi 命令模式:<#>

重做

撤消撤消。

  • Windows 模式:Ctrl+y
  • Vi 插入模式:Ctrl+y
  • Vi 命令模式:<Ctrl+y>

RepeatLastCommand

重复最后一个文本修改。

  • Vi 命令模式:<.>

ReplaceChar

将当前字符替换为键入的下一组字符。

  • Vi 命令模式:<c,l><c,Spacebar>

替换 CharInPlace

将当前字符替换为一个字符。

  • Vi 命令模式:<r>

还原线

将所有输入还原到当前输入。

  • Windows 模式:Escape
  • Emacs 模式:Alt+rEscape,r

ShellBackwardKillWord (贝壳向后杀字)

从当前单词的开头清除到光标的输入。 如果光标位于单词之间,则从上一个单词的开头清除输入到游标。 清除的文本放置在杀伤圈中。

函数未绑定。

ShellKillWord (贝壳杀字)

清除从光标到当前单词末尾的输入。 如果光标位于单词之间,则输入将从光标清除到下一个单词的末尾。 清除的文本放置在杀伤圈中。

函数未绑定。

交换角色

交换当前字符及其之前的字符。

  • Emacs 模式:Ctrl+t
  • Vi 插入模式:Ctrl+t
  • Vi 命令模式:<Ctrl+t>

撤消

撤消上一次编辑。

  • Windows 模式:Ctrl+z
  • Emacs 模式:Ctrl+_Ctrl+x,Ctrl+u
  • Vi 插入模式:Ctrl+z
  • Vi 命令模式:<Ctrl+z><u>

撤消全部

撤消以前对行所做的所有编辑。

  • Vi 命令模式:<U>

UnixWordRubout

从当前单词的开头清除到光标的输入。 如果光标位于单词之间,则从上一个单词的开头清除输入到游标。 清除的文本放置在杀伤圈中。

  • Emacs 模式:Ctrl+w

UpcaseWord

在 PSReadLine 2.3.0 中添加

将下一个单词转换为大写。

  • Emacs 模式:Alt+uEscape,u

验证和接受线

尝试执行当前输入。 如果当前输入不完整(例如缺少右括号、括号或引号),则延续提示将显示在下一行,PSReadLine 等待键编辑当前输入。

  • Emacs 模式:Ctrl+m

ViAcceptLine 公司

接受该行并切换到“插入”模式。

  • Vi 命令模式:<Enter>

ViAcceptLineOrExit

与 Emacs 模式下的 DeleteCharOrExit 类似,但接受行而不是删除字符。

  • Vi 插入模式:Ctrl+d
  • Vi 命令模式:<Ctrl+d>

ViAppendLine (维附加线)

新行插入到当前行下方。

  • Vi 命令模式:<o>

ViBackwardDeleteGlob

删除上一个单词,仅使用空格作为单词分隔符。

  • Vi 命令模式:<d,B>

ViBackwardGlob (维落后全球)

将光标移回上一个单词的开头,仅使用空格作为分隔符。

  • Vi 命令模式:<B>

ViBackwardReplaceGlob

删除到上一个单词的开头,用空格分隔,然后进入插入模式。

  • Vi 命令模式:<c,B>

ViBackwardReplaceLine (向后替换线)

替换光标左侧的行以及开始处的所有方式。

  • Vi 命令模式:<c,0>

ViBackwardReplaceLineToFirstChar

替换光标左侧的行以及行开头的一个字符。

  • Vi 命令模式:<c,^>

ViBackwardReplaceWord (向后替换单词)

替换上一个单词。

  • Vi 命令模式:<c,B>

ViDeleteBrace 维删除大括号

查找匹配的大括号、括号或方括号,并删除其中的所有内容,包括大括号。

  • Vi 命令模式:<d,%>

ViDeleteEndOfGlob

删除到单词末尾。

  • Vi 命令模式:<d,E>

ViDeleteGlob

删除下一个 glob (空格分隔的单词)。

  • Vi 命令模式:<d,W>

ViDeleteToBeforeChar

在给定字符之前删除。

  • Vi 命令模式:<d,t>

ViDeleteToBeforeCharBackward

在给定字符之前删除。

  • Vi 命令模式:<d,T>

ViDeleteToChar

在给定字符之前删除。

  • Vi 命令模式:<d,f>

ViDeleteToCharBackward

向后删除,直到给定字符。

  • Vi 命令模式:<d,F>

ViInsertAtBeginning (开始插入)

切换到“插入”模式,并将光标定位在行的开头。

  • Vi 命令模式:<I>

ViInsertAtEnd

切换到“插入”模式,并将光标置于行尾。

  • Vi 命令模式:<A>

ViInsertLine 插入

新行插入到当前行上方。

  • Vi 命令模式:<O>

ViInsertWithAppend

从当前行位置追加。

  • Vi 命令模式:<a>

ViInsertWithDelete (维插入删除)

删除当前字符并切换到“插入”模式。

  • Vi 命令模式:<s>

ViJoinLines 公司

联接当前行和下一行。

  • Vi 命令模式:<J>

ViReplaceBrace 维替换大括号

替换当前大括号字符与匹配的伙伴之间的所有字符。

  • Vi 命令模式:<c,%>

ViReplaceEndOfGlob

删除到单词末尾,用空格分隔,然后进入插入模式。

  • Vi 命令模式:<c,E>

ViReplaceEndOfWord

删除到单词末尾,以空格和通用分隔符分隔,并输入插入模式。

  • Vi 命令模式:<c,E>

ViReplaceGlob (维替换全球)

删除到下一个单词的开头,用空格分隔,然后输入插入模式。

  • Vi 命令模式:<c,W>

ViReplaceLine 系列

清除整个命令行。

  • Vi 命令模式:<S><c,c>

ViReplaceToBeforeChar

替换到给定字符为止。

  • Vi 命令模式:<c,t>

ViReplaceToBeforeCharBackward

替换到给定字符为止。

  • Vi 命令模式:<c,T>

ViReplaceToChar

在给定字符之前删除。

  • Vi 命令模式:<c,f>

ViReplaceToCharBackward

替换到给定字符为止。

  • Vi 命令模式:<c,F>

ViReplaceToEnd (维替换到结束)

将光标位置中的字符替换为行尾。

  • Vi 命令模式:<c,$><C>

ViReplaceUntilEsc

替换当前字符,直到输入转义或接受行。

  • Vi 命令模式:<r>

维替换词

替换当前单词。

  • Vi 命令模式:<c,W>

ViYankBeginningOfLine 系列

从缓冲区开头到光标的洋基。

  • Vi 命令模式:<y,0>

ViYankEndOfGlob

从光标到 WORD 结尾的洋克。

  • Vi 命令模式:<y,E>

维扬克EndOfWord

从光标到单词结尾的洋克。

  • Vi 命令模式:<y,e>

维扬克左

光标左侧的洋克字符(s)。

  • Vi 命令模式:<y,h>

维扬克线

对整个缓冲区进行唠叨。

  • Vi 命令模式:<y,y>

ViYankNextGlob

从光标到下一个 WORD 的开头的洋克。

  • Vi 命令模式:<y,W>

维扬克下一个单词

将光标后的单词(s)唠叨。

  • Vi 命令模式:<y,w>

维扬克百分比

从匹配大括号到/从匹配大括号。

  • Vi 命令模式:<y,%>

ViYank上一个全球

从 WORD(s)开始到光标的洋克。

  • Vi 命令模式:<y,B>

维扬克上一个单词

在光标前对单词进行扬克。

  • Vi 命令模式:<y,b>

维扬克赖特

光标下方和右侧的洋克字符。

  • Vi 命令模式:<y,l><y,Spacebar>

ViYankToEndOfLine

从光标到缓冲区末尾的洋基。

  • Vi 命令模式:<y,$>

ViYankToFirstChar

从第一个非空格字符到光标的洋基。

  • Vi 命令模式:<y,^>

美国 佬

将最近终止的文本添加到输入。

  • Emacs 模式:Ctrl+y

YankLastArg

从上一个历史记录行中获取最后一个参数。 使用参数时,第一次调用它的行为就像 YankNthArg 一样。 如果多次调用,而是循环访问历史记录,而 arg 设置方向(负反方向)。

  • Windows 模式:Alt+.
  • Emacs 模式:Alt+.Alt+_Escape,.Escape,_

YankNthArg

从上一个历史记录行获取第一个参数(命令后)。 使用参数时,将第 n 个参数(从 0 开始),如果参数为负,则从最后一个参数开始。

  • Emacs 模式:Ctrl+Alt+yEscape,Ctrl+y

洋克波普

如果上一操作是洋克或洋克Pop,请将之前被延边的文本替换为杀伤环中的下一个终止文本。

  • Emacs 模式:Alt+yEscape,y

完成函数

完成

尝试对光标周围的文本执行完成操作。 如果有多个可能的完成,则最长的明确前缀用于完成。 如果尝试完成最长的明确完成,则会显示可能的完成列表。

  • Emacs 模式:Tab

尝试对光标周围的文本执行完成操作。 如果有多个可能的完成,则最长的明确前缀用于完成。 如果尝试完成最长的明确完成,则会显示可能的完成列表。

  • Windows 模式:Ctrl+@Ctrl+Spacebar
  • Emacs 模式:Ctrl+Spacebar

可能的Completions

显示可能的完成列表。

  • Emacs 模式:Alt+=
  • Vi 插入模式:Ctrl+Spacebar
  • Vi 命令模式:<Ctrl+Spacebar>

TabCompleteNext

尝试完成光标周围的文本,并完成下一个可用完成。

  • Windows 模式:Tab
  • Vi 命令模式:<Tab>

TabCompletePrevious (选项卡上一页)

尝试使用上一个可用完成操作完成光标周围的文本。

  • Windows 模式:Shift+Tab
  • Vi 命令模式:<Shift+Tab>

ViTabComplete下一页

根据需要结束当前编辑组,并调用 TabCompleteNext。

  • Vi 插入模式:Tab

ViTabComplete上一个

根据需要结束当前编辑组,并调用 TabCompletePrevious。

  • Vi 插入模式:Shift+Tab

游标移动函数

BackwardChar (向后字符)

将光标向左移动一个字符。 这可能会将光标移到上一行多行输入。

  • Windows 模式:LeftArrow
  • Emacs 模式:LeftArrowCtrl+b

BackwardWord

将光标移回当前单词的开头,或者在单词之间移动前一个单词的开头。 Word 边界由一组可配置的字符定义。

  • Windows 模式:Ctrl+LeftArrow
  • Emacs 模式:Alt+bEscape,b
  • Vi 插入模式:Ctrl+LeftArrow
  • Vi 命令模式:<Ctrl+LeftArrow>

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

行的起点

如果输入具有多行,则移动到当前行的开头,或者如果已在行的开头,则移动到输入的开头。 如果输入有一行,请移动到输入的开头。

  • Windows 模式:Home
  • Emacs 模式:HomeCtrl+a
  • Vi 插入模式:Home
  • Vi 命令模式:<Home>

Line终点

如果输入具有多行,则移动到当前行的末尾,或者如果已在行末尾,则移动到输入的末尾。 如果输入有一行,则移动到输入的末尾。

  • Windows 模式:End
  • Emacs 模式:EndCtrl+e
  • Vi 插入模式:End

ForwardChar

将光标向右移动一个字符。 这可能会将光标移到多行输入的下一行。

  • Windows 模式:RightArrow
  • Emacs 模式:RightArrowCtrl+f

转发 Word

将光标向前移动到当前单词的末尾,或者在单词之间移动至下一个单词的末尾。 Word 边界由一组可配置的字符定义。

  • Emacs 模式:Alt+fEscape,f

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

GotoBrace

转到匹配的大括号、括号或方括号。

  • Windows 模式:Ctrl+]
  • Vi 插入模式:Ctrl+]
  • Vi 命令模式:<Ctrl+]>

转到列

移动到 arg 指示的列。

  • Vi 命令模式:<|>

GotoFirstNonBlankOfLine

将光标移到行中的第一个非空字符。

  • Vi 命令模式:<^><_>

MoveToEndOfLine

将光标移动到输入的末尾。

  • Vi 命令模式:<End><$>

MoveToFirstLine

转到多行命令中的第一行。

  • Vi 命令模式:<g,g>

MoveToLastLine (移至最后线)

转到多行命令中的最后一行。

  • Vi 命令模式:<G>

NextLine 系列

将光标移到下一行。

  • 函数未绑定。

下一页

将光标向前移动到下一个单词的开头。 Word 边界由一组可配置的字符定义。

  • Windows 模式:Ctrl+RightArrow
  • Vi 插入模式:Ctrl+RightArrow
  • Vi 命令模式:<Ctrl+RightArrow>

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

下一个WordEnd

将光标向前移动到当前单词的末尾,或者在单词之间移动至下一个单词的末尾。 Word 边界由一组可配置的字符定义。

  • Vi 命令模式:<e>

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

上一页

将光标移动到上一行。

  • 函数未绑定。

ShellBackwardWord

将光标移回当前单词的开头,或者在单词之间移动前一个单词的开头。 Word 边界由 PowerShell 令牌定义。

  • 函数未绑定。

壳前字

将光标向前移动到下一个单词的开头。 Word 边界由 PowerShell 令牌定义。

  • 函数未绑定。

ShellNextWord

将光标向前移动到当前单词的末尾,或者在单词之间移动至下一个单词的末尾。 Word 边界由 PowerShell 令牌定义。

  • 函数未绑定。

ViBackwardChar 系列

在 Vi 编辑模式下将光标移到左侧的一个字符。 这可能会将光标移到上一行多行输入。

  • Vi 插入模式:LeftArrow
  • Vi 命令模式:<LeftArrow><Backspace><h>

维落后Word

将光标移回当前单词的开头,或者在单词之间移动前一个单词的开头。 Word 边界由一组可配置的字符定义。

  • Vi 命令模式:<b>

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

ViEndOfGlob

将光标移动到此单词的末尾,以空格分隔。

  • Vi 命令模式:<E>

ViEndOfPreviousGlob

移动到上一个单词的末尾,仅使用空格作为单词分隔符。

  • 函数未绑定。

ViForwardChar

在 Vi 编辑模式下将光标移动到右侧的一个字符。 这可能会将光标移到多行输入的下一行。

  • Vi 插入模式:RightArrow
  • Vi 命令模式:<RightArrow><Spacebar><l>

ViGotoBrace 维戈托大括号

类似于 GotoBrace,但基于字符而不是基于令牌。

  • Vi 命令模式:<%>

ViNextGlob

移动到下一个单词,仅使用空格作为单词分隔符。

  • Vi 命令模式:<W>

ViNextWord

将光标向前移动到下一个单词的开头。 Word 边界由一组可配置的字符定义。

  • Vi 命令模式:<w>

定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOptionSet-PSReadLineOption

历史记录函数

历史的开端

移动到历史记录中的第一项。

  • Emacs 模式:Alt+<

清除历史记录

清除 PSReadLine 中的历史记录。 这不会影响 PowerShell 历史记录。

  • Windows 模式:Alt+F7

历史结束

移动到历史记录中的最后一项(当前输入)。

  • Emacs 模式:Alt+>

ForwardSearch历史

通过历史记录执行增量转发搜索。

  • Windows 模式:Ctrl+s
  • Emacs 模式:Ctrl+s
  • Vi 插入模式:Ctrl+s
  • Vi 命令模式:<Ctrl+s>

历史搜索向后

将当前输入替换为 PSReadLine 历史记录中的“上一个”项,该项与开始和输入和游标之间的字符匹配。

  • Windows 模式:F8

历史搜索转发

将当前输入替换为 PSReadLine 历史记录中的“下一步”项,该项与开始和输入和游标之间的字符匹配。

  • Windows 模式:Shift+F8

下一页历史

将当前输入替换为 PSReadLine 历史记录中的“下一步”项。

  • Windows 模式:DownArrow
  • Emacs 模式:DownArrowCtrl+n
  • Vi 插入模式:DownArrow
  • Vi 命令模式:<DownArrow><j><+>

上一页历史

将当前输入替换为 PSReadLine 历史记录中的“上一个”项。

  • Windows 模式:UpArrow
  • Emacs 模式:UpArrowCtrl+p
  • Vi 插入模式:UpArrow
  • Vi 命令模式:<UpArrow><k><->

ReverseSearch历史

通过历史记录执行增量向后搜索。

  • Windows 模式:Ctrl+r
  • Emacs 模式:Ctrl+r
  • Vi 插入模式:Ctrl+r
  • Vi 命令模式:<Ctrl+r>

ViSearchHistoryBackward (视频搜索历史向后)

提示搜索字符串,并在 AcceptLine 上启动搜索。

  • Vi 命令模式:</>

杂项函数

捕获屏幕

启动交互式屏幕捕获 - 向上/向下箭头选择行,输入所选文本作为文本和 HTML 复制到剪贴板。

  • 函数未绑定。

清屏

清除屏幕并在屏幕顶部绘制当前线条。

  • Windows 模式:Ctrl+l
  • Emacs 模式:Ctrl+l
  • Vi 插入模式:Ctrl+l
  • Vi 命令模式:<Ctrl+l>

DigitArgument (数字参数)

启动要传递给其他函数的新数字参数。 可以将它用作键压调用的下一个函数的乘数。 例如,按 <Alt+1><Alt+0>数字参数 值设置为 10。 然后,按 # 键会将 10 # 个字符(##########)发送到输入行。 同样,可以将此项用于其他作,例如 <Delete>Left-Arrow

  • Windows 模式:Alt+0Alt+1Alt+2Alt+3Alt+4Alt+5Alt+6Alt+7Alt+8Alt+9Alt+-
  • Emacs 模式:Alt+0Alt+1Alt+2Alt+3Alt+4Alt+5Alt+6Alt+7Alt+8Alt+9Alt+-
  • Vi 命令模式:<0><1><2><3><4><5><6><7><8><9>

调用提示

清除当前提示并调用提示函数以重新显示提示。 适用于更改状态的自定义键处理程序。 例如,更改当前目录。

  • 函数未绑定。

ScrollDisplayDown (滚动显示向下)

向下滚动一个屏幕。

  • Windows 模式:PageDown
  • Emacs 模式:PageDown

ScrollDisplayDownLine

向下滚动一行显示。

  • Windows 模式:Ctrl+PageDown
  • Emacs 模式:Ctrl+PageDown

ScrollDisplayToCursor (滚动显示到光标)

将显示器滚动到光标。

  • Emacs 模式:Ctrl+End

ScrollDisplayTop (滚动显示顶部)

将显示器滚动到顶部。

  • Emacs 模式:Ctrl+Home

ScrollDisplayUp (滚动显示向上)

向上滚动显示一个屏幕。

  • Windows 模式:PageUp
  • Emacs 模式:PageUp

ScrollDisplayUpLine 系列

向上滚动显示一行。

  • Windows 模式:Ctrl+PageUp
  • Emacs 模式:Ctrl+PageUp

ShowCommand帮助

提供完整的 cmdlet 帮助视图。 当游标位于完全扩展参数的末尾时,点击 <F1> 键将帮助显示在该参数的位置。

该帮助使用来自 Microsoft.PowerShell.Pager的 Pager 在备用屏幕缓冲区上显示。 退出寻呼器时,将返回到原始屏幕上的原始光标位置。 此寻呼程序仅适用于新式终端应用程序,例如 Windows 终端

  • Windows 模式:F1
  • Emacs 模式:F1
  • Vi 插入模式:F1
  • Vi 命令模式:<F1>

ShowKeyBindings

显示所有绑定键。

  • Windows 模式:Ctrl+Alt+?
  • Emacs 模式:Ctrl+Alt+?
  • Vi 插入模式:Ctrl+Alt+?

ShowParameter帮助

通过在当前命令行(如 MenuComplete)下显示参数,为参数提供动态帮助。 按下 <Alt+h> 键时,光标必须位于完全扩展参数名称的末尾。

  • Windows 模式:Alt+h
  • Emacs 模式:Alt+h
  • Vi 插入模式:Alt+h
  • Vi 命令模式:<Alt+h>

ViCommandMode

将当前作模式从 Vi-Insert 切换到 Vi-Command。

  • Vi 插入模式:Escape

ViDigitArgumentInChord

在 vi 的和弦之一中,启动一个新的数字参数以传递给其他函数。

  • 函数未绑定。

可视化编辑

在由 $env:EDITOR$env:VISUAL指定的文本编辑器中编辑命令行。

  • Emacs 模式:Ctrl+x,Ctrl+e
  • Vi 命令模式:<v>

ViExit 出口

退出 shell。

  • 函数未绑定。

ViInsertMode (视频插入模式)

切换到“插入”模式。

  • Vi 命令模式:<i>

WhatIsKey

读取密钥并告诉我密钥的绑定内容。

  • Windows 模式:Alt+?
  • Emacs 模式:Alt+?

预测函数

AcceptNextSuggestionWord

接受内联或所选建议的下一个单词

  • 函数未绑定。

接受建议

使用 InlineView 作为预测视图样式时,接受当前的内联建议。

  • 函数未绑定。

Next建议

使用 ListView 作为预测视图样式时,请导航到列表中的下一个建议。

  • 函数未绑定。

上一页建议

使用 ListView 作为预测视图样式时,请导航到列表中的上一建议。

  • 函数未绑定。

ShowFullPredictionTooltip (显示完整预测工具提示)

在完整视图中显示当前所选列表项的工具提示。

  • Windows 模式:F4
  • Emacs 模式:F4
  • Vi 插入模式:F4

SwitchPredictionView

InlineViewListView之间切换用于预测的视图样式。

  • Windows 模式:F2
  • Emacs 模式:F2
  • Vi 插入模式:F2

搜索函数

角色搜索

读取字符并向前搜索该字符的下一个匹配项。 如果指定了参数,则向前(如果为负)搜索第 n 个匹配项。

  • Windows 模式:F3
  • Emacs 模式:Ctrl+]
  • Vi 插入模式:F3
  • Vi 命令模式:<F3>

字符搜索向后

读取字符并向后搜索该字符的下一个匹配项。 如果指定了参数,则向后(如果为负)搜索第 n 个匹配项。

  • Windows 模式:Shift+F3
  • Emacs 模式:Ctrl+Alt+]
  • Vi 插入模式:Shift+F3
  • Vi 命令模式:<Shift+F3>

RepeatLastCharSearch

重复最后一次记录的字符搜索。

  • Vi 命令模式:<;>

RepeatLastCharSearchBackwards

重复最后记录的字符搜索,但方向相反。

  • Vi 命令模式:<,>

重复搜索

按照与之前相同的方向重复最后一次搜索。

  • Vi 命令模式:<n>

RepeatSearchBackward

按照与之前相同的方向重复最后一次搜索。

  • Vi 命令模式:<N>

搜索字符

阅读下一个字符,然后找到它,前进。

  • Vi 命令模式:<f>

搜索 CharBackward

读取下一个字符,然后找到它,向后移动。

  • Vi 命令模式:<F>

SearchCharBackwardWithBackoff

读取下一个字符,然后找到它,向后,然后返回一个字符。

  • Vi 命令模式:<T>

SearchCharWithBackoff

阅读下一个字符,然后找到它,前进,然后返回一个字符。

  • Vi 命令模式:<t>

搜索转发

提示搜索字符串,并在 AcceptLine 上启动搜索。

  • Vi 命令模式:<?>

选择函数

ExchangePointAndMark

光标放置在标记的位置,标记将移动到光标的位置。

  • Emacs 模式:Ctrl+x,Ctrl+x

全选

选择整行。

  • Windows 模式:Ctrl+a

SelectBackwardChar

调整当前所选内容以包含上一个字符。

  • Windows 模式:Shift+LeftArrow
  • Emacs 模式:Shift+LeftArrow

选择BackwardsLine

调整当前所选内容,以便从光标包含到行的开头。

  • Windows 模式:Shift+Home
  • Emacs 模式:Shift+Home

SelectBackwardWord

调整当前所选内容以包含上一个单词。

  • Windows 模式:Shift+Ctrl+LeftArrow
  • Emacs 模式:Alt+B

选择命令参数

选择命令参数。 选择参数的范围在脚本块内。 根据游标位置,它会从最内部的脚本块搜索到最大的脚本块,并在找到脚本块范围中的任何参数时停止。

此函数遵循 DigitArgument。 它将正参数或负自变量值视为当前所选自变量的向前或向后偏移,或者在未选择任何参数时从当前游标位置。

  • Windows 模式:Alt+a
  • Emacs 模式:Alt+a

SelectForwardChar

调整当前所选内容以包含下一个字符。

  • Windows 模式:Shift+RightArrow
  • Emacs 模式:Shift+RightArrow

选择转发词

调整当前所选内容以使用 ForwardWord 包含下一个单词。

  • Emacs 模式:Alt+F

选择线

调整当前所选内容,以便从光标包含到行尾。

  • Windows 模式:Shift+End
  • Emacs 模式:Shift+End

选择下一个单词

调整当前所选内容以包含下一个单词。

  • Windows 模式:Shift+Ctrl+RightArrow

SelectShellBackwardWord

调整当前所选内容以使用 ShellBackwardWord 包含上一个单词。

  • 函数未绑定。

选择 ShellForwardWord

调整当前所选内容以使用 ShellForwardWord 包含下一个单词。

  • 函数未绑定。

SelectShellNextWord

调整当前所选内容以使用 ShellNextWord 包含下一个单词。

  • 函数未绑定。

赛特马克

标记光标的当前位置,以便在后续编辑命令中使用。

  • Emacs 模式:Ctrl+@

自定义密钥绑定支持 API

以下函数在 Microsoft.PowerShell.PSConsoleReadLine 中公开,但不能直接绑定到密钥。 大多数在自定义密钥绑定中都很有用。

void AddToHistory(string command)

将命令行添加到历史记录中,而无需执行它。

void ClearKillRing()

清除杀手环。 这主要用于测试。

void Delete(int start, int length)

从头开始删除长度字符。 此操作支持撤消/重做。

void Ding()

根据用户的首选项执行 Ding 操作。

void GetBufferState([ref] string input, [ref] int cursor)
void GetBufferState([ref] Ast ast, [ref] Token[] tokens,
  [ref] ParseError[] parseErrors, [ref] int cursor)

这两个函数检索有关输入缓冲区的当前状态的有用信息。 第一个更常用于简单情况。 如果绑定使用 Ast 执行更高级的内容,则使用第二个。

IEnumerable[Microsoft.PowerShell.KeyHandler]
  GetKeyHandlers(bool includeBound, bool includeUnbound)

IEnumerable[Microsoft.PowerShell.KeyHandler]
  GetKeyHandlers(string[] Chord)

这两个函数由 Get-PSReadLineKeyHandler使用。 第一个用于获取所有键绑定。 第二个用于获取特定密钥绑定。

Microsoft.PowerShell.PSConsoleReadLineOptions GetOptions()

此函数由 Get-PSReadLineOption 使用,在自定义键绑定中可能不太有用。

void GetSelectionState([ref] int start, [ref] int length)

如果命令行上没有选择,该函数将返回 -1 开头和长度。 如果命令行上有选定内容,则返回所选内容的开始和长度。

void Insert(char c)
void Insert(string s)

在光标处插入字符或字符串。 此操作支持撤消/重做。

string ReadLine(runspace remoteRunspace,
  System.Management.Automation.EngineIntrinsics engineIntrinsics)

这是 PSReadLine 的主要入口点。 它不支持递归,因此在自定义键绑定中不起作用。

void RemoveKeyHandler(string[] key)

此函数由 Remove-PSReadLineKeyHandler 使用,在自定义键绑定中可能不太有用。

void Replace(int start, int length, string replacement)

替换某些输入。 此操作支持撤消/重做。 这是首选删除后跟 Insert,因为它被视为撤消的单个操作。

void SetCursorPosition(int cursor)

将光标移动到给定偏移量。 游标移动未跟踪撤消。

void SetOptions(Microsoft.PowerShell.SetPSReadLineOption options)

此函数是 cmdlet Set-PSReadLineOption使用的帮助程序方法,但对于想要暂时更改设置的自定义键绑定可能很有用。

bool TryGetArgAsInt(System.Object arg, [ref] int numericArg,
  int defaultNumericArg)

此帮助程序方法用于遵循 DigitArgument 的自定义绑定。 典型的调用如下所示

[int]$numericArg = 0
[Microsoft.PowerShell.PSConsoleReadLine]::TryGetArgAsInt($arg,
  [ref]$numericArg, 1)

笔记

OnIdle 事件的行为

  • 当正在使用 PSReadLine 时,OnIdle 事件会在 ReadKey() 超时(300 毫秒内无键入)时触发。 当用户处于编辑命令行的中间时,可能会发出该事件信号,例如,用户正在阅读帮助来确定要使用的参数。

    从 PSReadLine 2.2.0-beta4 开始,OnIdle 行为更改为仅当存在 ReadKey() 超时且当前编辑缓冲区为空时,才会向事件发出信号。

另请参阅