Windows 使用向上箭头访问PowerShell历史记录

Windows 使用向上箭头访问PowerShell历史记录,windows,powershell,Windows,Powershell,我最近切换到powershell,因为我的Cygwin bash在使用maven时开始给我带来无意义的编译错误。我在()中找到了如何保存和恢复我的命令历史记录,这似乎是可行的(在一个干净的开始之后,使用“历史记录”将显示最近的命令) 我似乎不能像在当前会话中使用该命令那样使用向上箭头访问此历史记录 有什么想法吗?你不能。没有用于访问控制台程序历史记录的API。我建议改掉这个旧习惯(我知道,它们很难改掉),并使用专为此而构建的PowerShell特定功能。事实上非常棒。这是#*[tab],这里有两

我最近切换到powershell,因为我的Cygwin bash在使用maven时开始给我带来无意义的编译错误。我在()中找到了如何保存和恢复我的命令历史记录,这似乎是可行的(在一个干净的开始之后,使用“历史记录”将显示最近的命令)

我似乎不能像在当前会话中使用该命令那样使用向上箭头访问此历史记录


有什么想法吗?

你不能。没有用于访问控制台程序历史记录的API。

我建议改掉这个旧习惯(我知道,它们很难改掉),并使用专为此而构建的PowerShell特定功能。事实上非常棒。这是#*[tab],这里有两个选项(括号中的tab([tab])表示应按下tab按钮):

->Powershell循环浏览历史记录中包含“pattern_from_command”的所有命令

->例如:在Powershell中:键入#echo,按tab->Powershell循环浏览历史记录中包含“echo”的所有命令(当然,如果有)

#[选项卡]
->Powershell完成id为的命令

->例如:在Powershell:type#3中,按tab->Powershell将历史记录中的第三(3)条命令写入命令行(虽然不直接执行,但只需按enter键即可执行)

我知道这和你在bash中做的不一样,但我认为这是值得尝试和习惯的


Bartek

自2013年10月起,现在可以使用奇妙的PSReadline模块:

当powershell会话退出时,您仍然需要保存历史记录,并在加载PSReadline之前将其加载到profile.ps1中(请参阅)。当PowerShell存在时,您可以注册一个钩子来保存您的历史记录,使用如下钩子:。与vanilla PowerShell不同,PSReadLine允许向上/向下键访问此历史缓冲区。

比如说现在可以了

您在官方GitHub中拥有所有安装文档:

您必须很好地遵循整个教程,并注意:

  • 如果出现错误,请删除
    -AllowPrerelease
    arg
  • 例如,在您的配置文件
    code$profile
    中添加此行
    导入模块'PSReadLine'
    ,以使用vscode打开您的配置文件配置文件
  • 如果希望所有工作正常,请在安装
    PSReadLine
    后关闭所有shell
如果您想让fleche像在Linux上一样在历史上搜索,请启动这两行代码,因为我认为这是大多数人都在寻找的:

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
默认情况下是默认配置的组合键
F8
SHIFT+F8

您可以通过以下内容查看conf:

Get-PSReadLineKeyHandler

您是否正在退出PS会话并重新启动它?恐怕您所要求的内容不存在。如果您不退出会话,那么向上箭头功能也会像cmd.exe一样出现。确实,这似乎是不可能的。哦,好吧,我想我会去调试Cygwin,或者只是做一个批来包装命令,因为每次启动时键入3行命令是一件非常痛苦的事情。你也可以做一个PowerShell函数。您可以将它放在您的个人资料中,以便在每次启动PS时都能使用它。从2013年10月起,现在终于可以使用奇妙的PSReadLine模块实现这一点:(参见备选答案)从技术上讲,这是解决我问题的一个方法,但我会尝试一下。谢谢但是需要更多的按键,而且也不是很方便!天哪。胡说八道。这太棒了。我怎么会不知道这件事呢。我想最好能提到
h[enter]
显示你的历史对不起,我给你一个反对票,反对“建议你改掉这个旧习惯(我知道,它们很难改掉)”这句话。您关于历史记录搜索的提示非常有用,但它确实扩展了历史记录,而不是取代“向上箭头”。也就是说,如果您正在处理一个命令,并且正在添加更多选项,那么您不希望一次又一次地搜索。我在PSReadline中没有看到此功能。它确实向上/下箭头添加了当前会话历史记录模式搜索功能,但它不会通过箭头键将保存的历史记录和当前会话历史记录加入到单个队列中,除非没有解释,而是作为脚本练习。这就是微软所做的。查尔斯:没错,PSReadline还没有完成历史记录的加载。如果没有PSReadline,即使加载历史记录,它也会加载到一个独立的缓冲区中,而不是加载上/下箭头所使用的缓冲区——也就是说,如果加载历史记录,传统的PowerShell无法使用上/下箭头访问它。使用PSReadline,如果加载历史记录,则可以使用向上/向下箭头进行加载。所以,假设您做了这两行“脚本编写练习”,PSReadline确实允许您获得这种行为。为了澄清,对答案进行了修改。截至2014年夏天,PSReadline中也支持历史管理。@jhclark,你是如何做到这一点的?在导入PSReadline之前,我已经尝试加载历史记录,但是使用上/下箭头仍然不可用。更新:找到它。您必须向概要文件脚本中添加以下行,并使用Get/add History
Set PSReadlineKeyHandler-Key UpArrow-Function History searchback Set PSReadlineKeyHandler-Key downarow-Function History searchforward Set PSReadlineOption-History保存路径驱动器:\path\to\file.txt
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Get-PSReadLineKeyHandler