在PowerShell中相当于bash的Ctrl-r


19

有谁知道在Windows Powershell中具有bash [Ctrl-r](和[Ctrl-o])的向后命令搜索功能的有用方法吗?

C-r是一种功能更强大的arrow up历史记录操作,就像emacs一样,它可以C-r在您先前输入的命令中向后搜索。然后C-o执行该命令,并在其后立即将下一个命令放在行中。这样您就可以有效地重复传递的一系列命令。此外,它还会查询已保存的历史记录,而不是会话历史记录。(~/.bash_history文件)。这是无限有用的。

谢谢。

ps:作为奖励,不能按周期工作的制表符补全也很糟糕。


您想复制什么ctrl O?更多信息我们永远都好...
Austin T French

是的,编辑了问题:)
v.oddou

2
我不支持此功能。PowerShell 3确实有一个称为钩子PSConsoleHostReadline,可能有用。一个不错的起点是使用PSReadLine,它使用了该钩子。PSReadLine不支持ctrl-o,但它确实支持ctrl-r(据说-对我不起作用)。我可能会在圣诞节期间实施ctrl-o,因为它听起来确实很有用。
dangph

2
嗯,PSReadLine,这似乎是我的答案,您应该将其发布为答案。它没有钴,但是最重要的是铬。它还具有我想要加分的选项卡完成调整。
v.oddou

2
PSReadline作者在这里-@ v.oddou-Ctrl + K应该在Emacs模式下绑定到KillLine。Ctrl + R应该在不输入任何内容的情况下起作用。我很高兴添加Ctrl + O-随时在github上打开一个问题。
杰森·希克

Answers:


15

输入命令的首字母,然后按F8

或者,您可以按F7并输入第一个字母。

更多详细信息:http : //technet.microsoft.com/zh-cn/magazine/ff678293.aspx


F7无所事事
Daniel K.

您能否提供更多信息?可能对其他人有用。哪个版本的Powershell和哪个版本的Windows?默认的Powershell非常有限。最好使用MobaXterm或ConEmuMaximus 5以获得更好的用户体验
georgik '16

@CatBoss F7在cmd中工作
phuclv

1
@LưuVĩnhPhúc那么答案需要这么说,因为这个问题是关于PowerShell的....
丹尼尔K.

请参阅下面的答案-如果您使用的是Powershell 5+,请不要浪费时间使用F8
Nicholas DiPiazza

6

WMF 5.0 RTM(包括Windows PowerShell 5)现在支持bash相同的反向命令搜索功能CTRL+R。我在Windows 10周年纪念版中一直在使用它,我的bash肌肉记忆非常高兴。

该支持实际上来自PowerShell模块PSReadLine,该问题的一些注释中提到了该模块。好消息是PSReadLine现在似乎已包含在基本WMF 5.0安装中,至少在Windows 10上是这样。

如果您运行的是PowerShell 3或更高版本,则还可以安装PSReadLine并获得历史记录搜索功能。

注意:我还没有找到如何使它在ISE中正常工作的方式,因为它CTRL+R已映射到其他东西(“显示/隐藏脚本窗格”)。


4

若要处理历史记录,可以使用history cmdlet,通过以下命令将其列出:

Get-Command *-history

搜索历史记录是这样完成的,可以随意创建一个函数来缩短它:

Get-history | Select-String "command"

function f ($Name) { Get-history | Select-String $name }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.