about_PSReadLine_Functions
简短说明
PSReadLine 在 PowerShell 控制台中提供改进的命令行编辑体验。
详细说明
PowerShell 7.3 随附 PSReadLine 2.2.6。 当前版本为 PSReadLine 2.3.4。 当前版本的 PSReadLine 可以在 Windows PowerShell 5.1 及更高版本上安装和使用。 对于某些功能,需要运行 PowerShell 7.2 或更高版本。
本文介绍 PSReadLine 2.3.4 提供的函数。 这些功能可以绑定到按键,以便轻松访问和调用。
使用 Microsoft.PowerShell.PSConsoleReadLine 类
类 Microsoft.PowerShell.PSConsoleReadLine 中提供了以下函数。
基本编辑函数
中止
中止当前操作,例如:增量历史记录搜索。
- Emacs 模式:
Ctrl+g
- Vi 插入模式:
Ctrl+g
- Vi 命令模式:
<Ctrl+g>
AcceptAndGetNext
尝试执行当前输入。 如果它可以执行(如 AcceptLine),则在下次调用 ReadLine 时从历史记录中召回下一个项目。
- Emacs 模式:
Ctrl+o
AcceptLine
尝试执行当前输入。 如果当前输入不完整(例如缺少闭括号、方括号或引号),则延续提示将显示在下一行,PSReadLine 等待键编辑当前输入。
- Windows 模式:
Enter
- Emacs 模式:
Enter
- Vi 插入模式:
Enter
AddLine
延续提示显示在下一行,PSReadLine 等待键编辑当前输入。 这对于将多行输入作为一条命令输入非常有用,即使单行本身已完成输入。
- Windows 模式:
Shift+Enter
- Emacs 模式:
Shift+Enter
- Vi 插入模式:
Shift+Enter
- Vi 命令模式:
<Shift+Enter>
BackwardDeleteChar
删除游标前的字符。
- Windows 模式:
Backspace
、Ctrl+h
- Emacs 模式:
Backspace
、Ctrl+Backspace
、Ctrl+h
- Vi 插入模式:
Backspace
- Vi 命令模式:
<X>
、<d,h>
BackwardDeleteInput
与 BackwardKillInput 类似,删除从该点到输入开头的文本,但不会将已删除的文本置于剪贴环中。
- Windows 模式:
Ctrl+Home
- Vi 插入模式:
Ctrl+u
、Ctrl+Home
- Vi 命令模式:
<Ctrl+u>
、<Ctrl+Home>
BackwardDeleteLine
与 BackwardKillLine 类似,删除从该点到行开头的文本,但不会将已删除的文本置于剪贴环中。
- Vi 命令模式:
<d,0>
BackwardDeleteWord
删除上一个单词。
- Vi 命令模式:
<Ctrl+w>
、<d,b>
BackwardKillInput
清除从输入开始到游标的文本。 清除的文本放置在剪贴环中。
- Emacs 模式:
Ctrl+u
、Ctrl+x,Backspace
BackwardKillLine
清除从当前逻辑行开头到游标的文本。 清除的文本放置在剪贴环中。
- 函数未绑定。
BackwardKillWord
清除从当前单词的开头到游标的输入。 如果游标位于单词之间,则清除从上一个单词的开头到游标的输入。 清除的文本放置在剪贴环中。
- Windows 模式:
Ctrl+Backspace
、Ctrl+w
- Emacs 模式:
Alt+Backspace
、Escape,Backspace
- Vi 插入模式:
Ctrl+Backspace
- Vi 命令模式:
<Ctrl+Backspace>
BackwardReplaceChar
替换光标前面的字符。
- Vi 命令模式:
<c,h>
CancelLine
取消当前输入,将输入留在屏幕上,但返回到主机,以便再次评估提示。
- Vi 插入模式:
Ctrl+c
- Vi 命令模式:
<Ctrl+c>
CapitalizeWord
在 PSReadLine 2.3.0 中添加
将下一个单词的第一个字符转换为大写,其余字符转换为小写。
- Emacs 模式:
Alt+c
、Escape,c
复制
将所选区域复制到系统剪贴板。 如果未选择任何区域,则复制整行。
- Windows 模式:
Ctrl+C
CopyOrCancelLine
如果选择文本,请复制到剪贴板,否则取消该行。
- Windows 模式:
Ctrl+c
- Emacs 模式:
Ctrl+c
剪切
删除在系统剪贴板中放置已删除文本的选定区域。
- Windows 模式:
Ctrl+x
DeleteChar
删除游标下的字符。
- Windows 模式:
Delete
- Emacs 模式:
Delete
- Vi 插入模式:
Delete
- Vi 命令模式:
<Delete>
、<x>
、<d,l>
、<d,Spacebar>
DeleteCharOrExit
删除游标下的字符,或如果该行为空,则会退出进程。
- Emacs 模式:
Ctrl+d
DeleteEndOfBuffer
删除至多行缓冲区的末尾。
- Vi 命令模式:
<d,G>
DeleteEndOfWord
删除至单词末尾。
- Vi 命令模式:
<d,e>
DeleteLine
删除多行缓冲区的当前逻辑行,启用撤消。
- Vi 命令模式:
<d,d>
、<d,_>
DeleteLineToFirstChar
从多行缓冲区中当前逻辑行的第一个非空白字符中删除。
- Vi 命令模式:
<d,^>
DeleteNextLines
删除多行缓冲区中的当前和下一 n 个逻辑行。
- Vi 命令模式:
<d,j>
DeletePreviousLines
删除多行缓冲区中的上一个请求的逻辑行和当前逻辑行。
- Vi 命令模式:
<d,k>
DeleteRelativeLines
从缓冲区的开头删除至多行缓冲区中的当前逻辑行。
与大多数 Vi 命令一样,<d,g,g>
命令前可以加上一个指定绝对行号的数字参数,该行号与当前行号一起构成要删除的行的范围。 如果未指定,则数值参数默认为 1,该参数引用多行缓冲区中的第一个逻辑行。
要从多行中删除的实际行数计算为当前逻辑行号与指定数值参数之间的差值,因此可以为负数。 因此,有了方法名称的相对部分。
- Vi 命令模式:
<d,g,g>
DeleteToEnd
删除至行尾。
- Vi 命令模式:
<D>
、<d,$>
DeleteWord
删除下一个单词。
- Vi 命令模式:
<d,w>
DowncaseWord
在 PSReadLine 2.3.0 中添加
将下一个单词转换为小写。
- Emacs 模式:
Alt+l
、Escape,l
ForwardDeleteInput
与 KillLine 类似,删除从该点到输入末尾的文本,但不会将已删除的文本置于剪贴环中。
- Windows 模式:
Ctrl+End
- Vi 插入模式:
Ctrl+End
- Vi 命令模式:
<Ctrl+End>
ForwardDeleteLine
删除从该点到当前逻辑行末尾的文本,但不会将已删除的文本置于剪贴环中。
- 函数未绑定
InsertLineAbove
无论游标位于当前行上何处,都会在当前行上方创建新的空行。 游标移动到新行的开头。
- Windows 模式:
Ctrl+Enter
InsertLineBelow
无论游标位于当前行上何处,都会在当前行下方创建新的空行。 游标移动到新行的开头。
- Windows 模式:
Shift+Ctrl+Enter
InvertCase
反转当前字符的大小写,并移动到下一个字符。
- Vi 命令模式:
<~>
KillLine
清除从游标到输入末尾的输入。 清除的文本放置在剪贴环中。
- Emacs 模式:
Ctrl+k
KillRegion
剪贴游标和标记之间的文本。
- 函数未绑定。
KillWord
清除从游标到当前单词末尾的输入。 如果游标位于单词之间,则清除从游标到下一个单词末尾的输入。 清除的文本放置在剪贴环中。
- Windows 模式:
Alt+d
、Ctrl+Delete
- Emacs 模式:
Alt+d
、Escape,d
- Vi 插入模式:
Ctrl+Delete
- Vi 命令模式:
<Ctrl+Delete>
粘贴
粘贴系统剪贴板中的文本。
- Windows 模式:
Ctrl+v
、Shift+Insert
- Vi 插入模式:
Ctrl+v
- Vi 命令模式:
<Ctrl+v>
重要
使用 Paste 函数时,剪贴板缓冲区的全部内容将粘贴到 PSReadLine 的输入缓冲区中。 然后,输入缓冲区将传递给 PowerShell 分析器。 使用控制台应用程序的右键单击粘贴方法粘贴的输入会一次一个字符的复制到输入缓冲区。 复制换行符时,输入缓冲区将传递给分析程序。 因此,会一次分析一行输入。 粘贴方法之间的差异会导致不同的执行行为。
PasteAfter
将剪贴板粘贴到游标后,将游标移动到粘贴文本的末尾。
- Vi 命令模式:
<p>
PasteBefore
将剪贴板粘贴到游标之前,将游标移动到粘贴文本的末尾。
- Vi 命令模式:
<P>
PrependAndAccept
在前面添加一个“#”并接受该行。
- Vi 命令模式:
<#>
重做
撤消一个撤消操作。
- Windows 模式:
Ctrl+y
- Vi 插入模式:
Ctrl+y
- Vi 命令模式:
<Ctrl+y>
RepeatLastCommand
Repeat the last text modification.
- Vi 命令模式:
<.>
ReplaceChar
将当前字符替换为键入的下一组字符。
- Vi 命令模式:
<c,l>
、<c,Spacebar>
ReplaceCharInPlace
将当前字符替换为一个字符。
- Vi 命令模式:
<r>
RevertLine
将所有输入还原到当前输入。
- Windows 模式:
Escape
- Emacs 模式:
Alt+r
、Escape,r
ShellBackwardKillWord
清除从当前单词的开头到游标的输入。 如果游标位于单词之间,则清除从上一个单词的开头到游标的输入。 清除的文本放置在剪贴环中。
函数未绑定。
ShellKillWord
清除从游标到当前单词末尾的输入。 如果游标位于单词之间,则清除从游标到下一个单词末尾的输入。 清除的文本放置在剪贴环中。
函数未绑定。
SwapCharacters
交换当前字符与其前一字符。
- 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>
UndoAll
撤消以前对行所做的所有编辑。
- Vi 命令模式:
<U>
UnixWordRubout
清除从当前单词的开头到游标的输入。 如果游标位于单词之间,则清除从上一个单词的开头到游标的输入。 清除的文本放置在剪贴环中。
- Emacs 模式:
Ctrl+w
UpcaseWord
在 PSReadLine 2.3.0 中添加
将下一个单词转换为大写。
- Emacs 模式:
Alt+u
、Escape,u
ValidateAndAcceptLine
尝试执行当前输入。 如果当前输入不完整(例如缺少闭括号、方括号或引号),则延续提示将显示在下一行,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>
ViReplaceWord
替换当前单词。
- Vi 命令模式:
<c,W>
ViYankBeginningOfLine
从缓冲区开头粘贴到游标处。
- Vi 命令模式:
<y,0>
ViYankEndOfGlob
从游标处粘贴到词尾。
- Vi 命令模式:
<y,E>
ViYankEndOfWord
从游标处粘贴到词尾。
- Vi 命令模式:
<y,e>
ViYankLeft
将字符粘贴到游标左侧。
- Vi 命令模式:
<y,h>
ViYankLine
粘贴整个缓冲区。
- Vi 命令模式:
<y,y>
ViYankNextGlob
从游标处粘贴到到下一个单词的开头。
- Vi 命令模式:
<y,W>
ViYankNextWord
将单词粘贴到游标之后。
- Vi 命令模式:
<y,w>
ViYankPercent
从/向匹配大括号粘贴。
- Vi 命令模式:
<y,%>
ViYankPreviousGlob
从单词的开头粘贴到游标处。
- Vi 命令模式:
<y,B>
ViYankPreviousWord
将单词粘贴到游标之前。
- Vi 命令模式:
<y,b>
ViYankRight
将字符粘贴到游标下方和右侧。
- 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+y
、Escape,Ctrl+y
YankPop
如果上一操作是 Yank 或 YankPop,请将之前粘贴的文本替换为剪贴环中的下一个剪贴文本。
- Emacs 模式:
Alt+y
、Escape,y
完成函数
完成
尝试对游标周围的文本执行完成操作。 如果有多个可能的完成,则使用最长的明确前缀完成。 如果尝试完成最长的明确完成,则会显示可能的完成列表。
- Emacs 模式:
Tab
MenuComplete
尝试对游标周围的文本执行完成操作。 如果有多个可能的完成,则使用最长的明确前缀完成。 如果尝试完成最长的明确完成,则会显示可能的完成列表。
- Windows 模式:
Ctrl+@
、Ctrl+Spacebar
- Emacs 模式:
Ctrl+Spacebar
PossibleCompletions
显示可能的完成列表。
- Emacs 模式:
Alt+=
- Vi 插入模式:
Ctrl+Spacebar
- Vi 命令模式:
<Ctrl+Spacebar>
TabCompleteNext
尝试使用下一个可用完成完成光标周围的文本。
- Windows 模式:
Tab
- Vi 命令模式:
<Tab>
TabCompletePrevious
尝试使用上一个可用完成完成光标周围的文本。
- Windows 模式:
Shift+Tab
- Vi 命令模式:
<Shift+Tab>
ViTabCompleteNext
根据需要结束当前编辑组,并调用 TabCompleteNext。
- Vi 插入模式:
Tab
ViTabCompletePrevious
根据需要结束当前编辑组,并调用 TabCompletePrevious。
- Vi 插入模式:
Shift+Tab
游标移动函数
BackwardChar
将游标左移一个字符。 这可能会将游标移至多行输入中的上一行。
- Windows 模式:
LeftArrow
- Emacs 模式:
LeftArrow
、Ctrl+b
BackwardWord
将游标移回当前单词的开头,或如果在单词之间,则移至前一个单词的开头。 单词边界由一组可配置的字符定义。
- Windows 模式:
Ctrl+LeftArrow
- Emacs 模式:
Alt+b
、Escape,b
- Vi 插入模式:
Ctrl+LeftArrow
- Vi 命令模式:
<Ctrl+LeftArrow>
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
BeginningOfLine
如果输入具有多行,则移动到当前行的开头,或者如果已在行的开头,则移动到输入的开头。 如果输入为单一行,则移动到输入的开头。
- Windows 模式:
Home
- Emacs 模式:
Home
、Ctrl+a
- Vi 插入模式:
Home
- Vi 命令模式:
<Home>
EndOfLine
如果输入具有多行,则移动到当前行的末尾,或者如果已在行的末尾,则移动到输入的末尾。 如果输入为单一行,则移动到输入的末尾。
- Windows 模式:
End
- Emacs 模式:
End
、Ctrl+e
- Vi 插入模式:
End
ForwardChar
将游标右移一个字符。 这可能会将游标移到多行输入中的下一行。
- Windows 模式:
RightArrow
- Emacs 模式:
RightArrow
、Ctrl+f
ForwardWord
将游标向前移动到当前单词的末尾,或者如果在单词之间,则移动至下一单词的末尾。 单词边界由一组可配置的字符定义。
- Emacs 模式:
Alt+f
、Escape,f
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
GotoBrace
转到匹配的大括号、圆括号或方括号。
- Windows 模式:
Ctrl+]
- Vi 插入模式:
Ctrl+]
- Vi 命令模式:
<Ctrl+]>
GotoColumn
移至 arg 指示的列。
- Vi 命令模式:
<|>
GotoFirstNonBlankOfLine
将游标移至行中的第一个非空字符。
- Vi 命令模式:
<^>
、<_>
MoveToEndOfLine
将游标移至输入的末尾。
- Vi 命令模式:
<End>
、<$>
MoveToFirstLine
转到多行命令中的第一行。
- Vi 命令模式:
<g,g>
MoveToLastLine
转到多行命令中的最后一行。
- Vi 命令模式:
<G>
NextLine
将游标移至下一行。
- 函数未绑定。
NextWord
将游标向前移动至下一个单词的开头。 单词边界由一组可配置的字符定义。
- Windows 模式:
Ctrl+RightArrow
- Vi 插入模式:
Ctrl+RightArrow
- Vi 命令模式:
<Ctrl+RightArrow>
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
NextWordEnd
将游标向前移动到当前单词的末尾,或者如果在单词之间,则移动至下一单词的末尾。 单词边界由一组可配置的字符定义。
- Vi 命令模式:
<e>
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
PreviousLine
将游标移至上一行。
- 函数未绑定。
ShellBackwardWord
将游标移回当前单词的开头,或如果在单词之间,则移至前一个单词的开头。 单词边界由 PowerShell 令牌定义。
- 函数未绑定。
ShellForwardWord
将游标向前移动至下一个单词的开头。 单词边界由 PowerShell 令牌定义。
- 函数未绑定。
ShellNextWord
将游标向前移动到当前单词的末尾,或者如果在单词之间,则移动至下一单词的末尾。 单词边界由 PowerShell 令牌定义。
- 函数未绑定。
ViBackwardChar
在 Vi 编辑模式下将游标左移一个字符。 这可能会将游标移至多行输入中的上一行。
- Vi 插入模式:
LeftArrow
- Vi 命令模式:
<LeftArrow>
、<Backspace>
、<h>
ViBackwardWord
将游标移回当前单词的开头,或如果在单词之间,则移至前一个单词的开头。 单词边界由一组可配置的字符定义。
- Vi 命令模式:
<b>
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
ViEndOfGlob
将光标移动到此单词的末尾,以空格分隔。
- Vi 命令模式:
<E>
ViEndOfPreviousGlob
移至上一个单词的末尾,仅使用空格作为单词分隔符。
- 函数未绑定。
ViForwardChar
在 Vi 编辑模式下将游标右移一个字符。 这可能会将游标移到多行输入中的下一行。
- Vi 插入模式:
RightArrow
- Vi 命令模式:
<RightArrow>
、<Spacebar>
、<l>
ViGotoBrace
类似于 GotoBrace,但基于字符而不是基于令牌。
- Vi 命令模式:
<%>
ViNextGlob
移至下一个单词,仅使用空格作为单词分隔符。
- Vi 命令模式:
<W>
ViNextWord
将游标向前移动至下一个单词的开头。 单词边界由一组可配置的字符定义。
- Vi 命令模式:
<w>
定义单词边界的字符在 PSConsoleReadLineOptions 对象的 WordDelimiters 属性中配置。 若要查看或更改 WordDelimiters 属性,请参阅 Get-PSReadLineOption 和 Set-PSReadLineOption。
历史记录函数
BeginningOfHistory
移至历史记录中的第一项。
- Emacs 模式:
Alt+<
ClearHistory
清除 PSReadLine 中的历史记录。 这不会影响 PowerShell 历史记录。
- Windows 模式:
Alt+F7
EndOfHistory
移至历史记录中的最后一项(当前输入)。
- Emacs 模式:
Alt+>
ForwardSearchHistory
通过历史记录执行增量转发搜索。
- Windows 模式:
Ctrl+s
- Emacs 模式:
Ctrl+s
- Vi 插入模式:
Ctrl+s
- Vi 命令模式:
<Ctrl+s>
HistorySearchBackward
将当前输入替换为 PSReadLine 历史记录中的“上一个”项,该项与开始和输入以及游标之间的字符匹配。
- Windows 模式:
F8
HistorySearchForward
将当前输入替换为 PSReadLine 历史记录中的“下一个”项,该项与开始和输入以及游标之间的字符匹配。
- Windows 模式:
Shift+F8
NextHistory
将当前输入替换为 PSReadLine 历史记录中的“下一个”项。
- Windows 模式:
DownArrow
- Emacs 模式:
DownArrow
、Ctrl+n
- Vi 插入模式:
DownArrow
- Vi 命令模式:
<DownArrow>
、<j>
、<+>
PreviousHistory
将当前输入替换为 PSReadLine 历史记录中的“上一个”项。
- Windows 模式:
UpArrow
- Emacs 模式:
UpArrow
、Ctrl+p
- Vi 插入模式:
UpArrow
- Vi 命令模式:
<UpArrow>
、<k>
、<->
ReverseSearchHistory
通过历史记录执行增量向后搜索。
- Windows 模式:
Ctrl+r
- Emacs 模式:
Ctrl+r
- Vi 插入模式:
Ctrl+r
- Vi 命令模式:
<Ctrl+r>
ViSearchHistoryBackward
提示搜索字符串,并在 AcceptLine 上启动搜索。
- Vi 命令模式:
</>
其他函数
CaptureScreen
启动交互式屏幕捕获,使用向上/向下箭头选择行,输入所选文本作为文本和 HTML 复制到剪贴板。
- 函数未绑定。
ClearScreen
清除屏幕并在屏幕顶部绘制当前行。
- Windows 模式:
Ctrl+l
- Emacs 模式:
Ctrl+l
- Vi 插入模式:
Ctrl+l
- Vi 命令模式:
<Ctrl+l>
DigitArgument
启动要传递给其他函数的新数字参数。 可以将它用作由按键触发调用的下一个函数的乘数。 例如,按<Alt+1>
<Alt+0>
将数字参数值设置为 10。 然后,按 #
键会将 10 #
字符 (##########
) 发送到输入行。
同样,可以将此项用于其他操作,例如 <Delete>
或 Left-Arrow
。
- Windows 模式:
Alt+0
、Alt+1
、Alt+2
、Alt+3
、Alt+4
、Alt+5
、Alt+6
、Alt+7
、Alt+8
、Alt+9
、Alt+-
- Emacs 模式:
Alt+0
、Alt+1
、Alt+2
、Alt+3
、Alt+4
、Alt+5
、Alt+6
、Alt+7
、Alt+8
、Alt+9
、Alt+-
- Vi 命令模式:
<0>
、<1>
、<2>
、<3>
、<4>
、<5>
、<6>
、<7>
、<8>
、<9>
InvokePrompt
清除当前提示并调用提示函数以重新显示提示。 适用于更改状态的自定义键处理程序。 例如,更改当前目录。
- 函数未绑定。
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
ShowCommandHelp
提供完整的 cmdlet 帮助视图。 当游标位于完全展开参数的末尾时,点击 <F1>
键在该参数的位置显示帮助信息。
该帮助使用来自 Microsoft.PowerShell.Pager 的寻呼程序在备用屏幕缓冲区上显示。 退出寻呼程序时,将返回到原始屏幕上的原始游标位置。 此寻呼程序仅适用于新式终端应用程序,例如 Windows 终端。
- Windows 模式:
F1
- Emacs 模式:
F1
- Vi 插入模式:
F1
- Vi 命令模式:
<F1>
ShowKeyBindings
显示所有绑定键。
- Windows 模式:
Ctrl+Alt+?
- Emacs 模式:
Ctrl+Alt+?
- Vi 插入模式:
Ctrl+Alt+?
ShowParameterHelp
通过在当前命令行(如 MenuComplete
)下显示参数,为参数提供动态帮助。 按下 <Alt+h>
键时,游标必须位于完全展开的参数名称的末尾。
- Windows 模式:
Alt+h
- Emacs 模式:
Alt+h
- Vi 插入模式:
Alt+h
- Vi 命令模式:
<Alt+h>
ViCommandMode
将当前操作模式从 Vi 插入切换到 Vi 命令。
- Vi 插入模式:
Escape
ViDigitArgumentInChord
在 vi 的按键组合之一中启动新数字参数,以传递给其他函数。
- 函数未绑定。
ViEditVisually
在由 $env:EDITOR
或 $env:VISUAL
指定的文本编辑器中编辑命令行。
- Emacs 模式:
Ctrl+x,Ctrl+e
- Vi 命令模式:
<v>
ViExit
退出 shell。
- 函数未绑定。
ViInsertMode
切换到“插入”模式。
- Vi 命令模式:
<i>
WhatIsKey
读取密钥并告诉我密钥与什么内容绑定。
- Windows 模式:
Alt+?
- Emacs 模式:
Alt+?
预测函数
AcceptNextSuggestionWord
接受内联或所选建议的下一个单词
- 函数未绑定。
AcceptSuggestion
当用作 InlineView
预测视图样式时,接受当前内联建议。
- 函数未绑定。
NextSuggestion
当用作 ListView
预测视图样式时,导航到列表中的下一个建议。
- 函数未绑定。
PreviousSuggestion
当用作 ListView
预测的视图样式时,导航到列表中的上一个建议。
- 函数未绑定。
ShowFullPredictionTooltip
在完整视图中显示当前所选列表项的工具提示。
- Windows 模式:
F4
- Emacs 模式:
F4
- Vi 插入模式:
F4
SwitchPredictionView
在 InlineView
和 ListView
之间切换预测的视图样式。
- Windows 模式:
F2
- Emacs 模式:
F2
- Vi 插入模式:
F2
搜索函数
CharacterSearch
读取字符并向前搜索该字符的下一个匹配项。 如果指定了参数,则向前(如果为负则向后)搜索第 n 个匹配项。
- Windows 模式:
F3
- Emacs 模式:
Ctrl+]
- Vi 插入模式:
F3
- Vi 命令模式:
<F3>
CharacterSearchBackward
读取字符并向后搜索该字符的下一个匹配项。 如果指定了参数,则向后(如果为负则向前)搜索第 n 个匹配项。
- Windows 模式:
Shift+F3
- Emacs 模式:
Ctrl+Alt+]
- Vi 插入模式:
Shift+F3
- Vi 命令模式:
<Shift+F3>
RepeatLastCharSearch
重复上次记录的字符搜索。
- Vi 命令模式:
<;>
RepeatLastCharSearchBackwards
重复上次记录的字符搜索,但方向相反。
- Vi 命令模式:
<,>
RepeatSearch
按照与之前相同的方向重复上次搜索。
- Vi 命令模式:
<n>
RepeatSearchBackward
按照与之前相同的方向重复上次搜索。
- Vi 命令模式:
<N>
SearchChar
阅读下一个字符,然后找到它,前进。
- Vi 命令模式:
<f>
SearchCharBackward
读取下一个字符,然后找到它,向后移动。
- Vi 命令模式:
<F>
SearchCharBackwardWithBackoff
读取下一个字符,然后找到它,向后回退,然后返回一个字符。
- Vi 命令模式:
<T>
SearchCharWithBackoff
读取下一个字符,然后找到它,继续向前,然后返回一个字符。
- Vi 命令模式:
<t>
SearchForward
提示搜索字符串,并在 AcceptLine 上启动搜索。
- Vi 命令模式:
<?>
选择函数
ExchangePointAndMark
游标放置在标记的位置,标记将移至游标的位置。
- Emacs 模式:
Ctrl+x,Ctrl+x
SelectAll
选择整行。
- Windows 模式:
Ctrl+a
SelectBackwardChar
调整当前所选内容以包含上一个字符。
- Windows 模式:
Shift+LeftArrow
- Emacs 模式:
Shift+LeftArrow
SelectBackwardsLine
调整当前所选内容,以包含从游标到行的开头的内容。
- Windows 模式:
Shift+Home
- Emacs 模式:
Shift+Home
SelectBackwardWord
调整当前所选内容以包含上一个单词。
- Windows 模式:
Shift+Ctrl+LeftArrow
- Emacs 模式:
Alt+B
SelectCommandArgument
对命令参数进行可视化选择。 选择参数的范围在脚本块之内。 根据游标位置,它会从最内部的脚本块搜索到最外部的脚本块,并在找到脚本块范围中的任何参数时停止。
此函数遵循 DigitArgument。 它将正或负自变量值视为当前所选自变量或在未选定参数时从当前光标位置向前或向后的偏移。
- Windows 模式:
Alt+a
- Emacs 模式:
Alt+a
SelectForwardChar
调整当前所选内容以包含下一个字符。
- Windows 模式:
Shift+RightArrow
- Emacs 模式:
Shift+RightArrow
SelectForwardWord
调整当前所选内容以使用 ForwardWord 包含下一个单词。
- Emacs 模式:
Alt+F
SelectLine
调整当前所选内容,以包含从游标到行末尾的内容。
- Windows 模式:
Shift+End
- Emacs 模式:
Shift+End
SelectNextWord
调整当前所选内容以包含下一个单词。
- Windows 模式:
Shift+Ctrl+RightArrow
SelectShellBackwardWord
调整当前所选内容以使用 ShellBackwardWord 包含上一个单词。
- 函数未绑定。
SelectShellForwardWord
调整当前所选内容以使用 ShellForwardWord 包含下一个单词。
- 函数未绑定。
SelectShellNextWord
调整当前所选内容以使用 ShellNextWord 包含下一个单词。
- 函数未绑定。
SetMark
标记游标的当前位置,以便在后续编辑命令中使用。
- 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)
替换某些输入。 此操作支持撤消/重做。 这比先删除再插入更受青睐,因为它被视为撤销的单个操作。
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()
超时且当前编辑缓冲区为空时,事件才会发出信号。