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

问题描述 投票:0回答:4

我最近切换到了 powershell,因为我的 Cygwin bash 在使用 maven 时开始给我带来毫无意义的编译错误。我找到了如何保存和恢复我的命令历史记录(https://stackoverflow.com/questions/9259723/is-there-a-windows-shell-tool-can-keep-history),这似乎工作(使用“历史记录”将在干净启动后显示最近的命令)。

我似乎无法做的是使用向上箭头访问此历史记录,就像在当前会话中使用该命令一样。

有什么想法吗?

windows powershell
4个回答
24
投票

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

#pattern_from_command[tab] 

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

-> EG:在 Powershell 中:输入 #echo,按 Tab 键 -> Powershell 循环浏览历史中包含“echo”的所有命令(当然,如果有的话)。

#<id>[tab] 

-> Powershell 完成带有 id 的命令

-> EG:在Powershell中:输入#3,按tab键-> Powershell将历史上的第三(3)条命令写入命令行(虽然不直接执行,但只需按回车即可执行)。

我知道这与您在 bash 中所做的不同,但我认为值得尝试并习惯。

编辑:PSReadLine 的最新版本似乎删除了该功能。无论如何,您最好使用 PSReadLine 中的功能,但如果您想在常规控制台中尝试一下,但它不起作用 - 只是

Remove-Module -Name PSReadLine

功能在默认情况下不加载 PSReadLine 的任何主机中仍然有效(例如 PowerShell ISE)。


10
投票

就像说@jhclark现在是可能的

您在官方 GitHub 中拥有所有安装文档:https://github.com/PowerShell/PSReadLine

您必须严格遵循整个教程并注意:

    如果出现错误,请删除
  • -AllowPrerelease
     arg 
  • 在您的个人资料中添加此行
  • Import-Module 'PSReadLine'
     
    code $PROFILE
     例如,使用 vscode 打开您的个人资料conf
  • 安装后关闭所有外壳
  • PSReadLine
    如果你想让一切正常工作
如果您希望 fleche 像在 Linux 上一样在历史记录中搜索,请启动这两行,因为我认为这是大多数人正在寻找的:

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
默认是默认配置的组合键 

F8

SHIFT + F8

你可以看到conf:

Get-PSReadLineKeyHandler


2024 年 5 月更新

PowerShell 版本 Windows 11 22631.3668

$PsVersionTable Name Value ---- ----- PSVersion 5.1.22621.3668 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.22621.3668 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
自从我发布这个答案以来已经有一段时间了,在较新版本的 PowerShell 中,所有内容现在都已正确配置,开箱即用。但是,如果您遇到任何问题,我提供的答案仍然有用。
PSReadLine运行时设置的默认值

Get-PSReadLineKeyHandler

如下:

UpArrow PreviousHistory DownArrow NextHistory ... F8 HistorySearchBackward Shift+F8 HistorySearchForward
最后两个在视觉上做了同样的事情,但我相信他们实现的方式不同


7
投票
截至 2013 年 10 月,现在可以使用精彩的 PSReadline 模块实现这一点:

http://github.com/lzybkr/PSReadLine

您仍然需要在 powershell 会话退出时保存历史记录,并在加载 PSReadline 之前将其加载到您的 profile.ps1 中(请参阅

http://technet.microsoft.com/en-us/library/ee156792.aspx )。当 PowerShell 存在时,您可以使用如下挂钩注册一个挂钩来保存历史记录:Powershell 配置文件“退出”事件?。与普通的 PowerShell 不同,PSReadLine 允许使用向上/向下键访问此历史缓冲区。


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

© www.soinside.com 2019 - 2024. All rights reserved.